网站首页 > 技术文章 正文
有些人很疑惑为什么在Python3里有的变量前面有个*号呢?如下图!
Python不可以会无缘无故的出现这种写法,必然有他的用处!小编今天就跟大家一起来分析一下原因吧!
元组变量前加 * 视为对元组解包。解包后的子内容会依次赋值给对应位置的其他变量
一个元组解包最经典的用法就是python里的两变量值互换但不借用第三中间变量:、
a, b = b, a
当然这里没有 * ,此外还注意到元素数量较少不会引起歧义时,元组两侧的括号可以省略
回到题图命令里
product(A, B)
相当于返回一个A,B列表中元素依次互相配对的生成器。假设里面有 5 个元组,那么在用 * 解包后就会返回 5 个元素(都是元组)。而print命令恰好是一个可以接受无限多参数的函数(作用就是把这些参数内的内容打印出来),于是你就会看到 5 个元组依次出现在屏幕上了。
扩展一下,如其他答主所说,* 也可以用来解包参数以传递给函数使用。但这其实也是利用了元组的解包特性。
例如如下代码:
def funcA(*args):
print(*args)
funcA([1,2,3], [4,5,6])
# 返回 [1, 2, 3] [4, 5, 6]
这是因为这里的参数分别是 [1,2,3] 和 [4,5,6] 两个数组。当然这个函数没有太大意义。你在很多著名库里(比如绘图的matplotlib)都会看到某些api的语法是
maplotlib.plot(x, y, key1, key2, ..., *args, **kwargs)
这种形式。这里是利用了元组解包的另一个性质——元组解包可以包含一个*args关键字,将“多余”的部分塞给这个可变长的变量中,例如:( 需要注意的是,我这里是为了方便理解然而这种写法有时候不被支持,因为python的函数,必须要求所有非关键字参数出现在关键字参数之前,而这个例子里有些参数可能是关键字形式的)
c = (1, 2, 3, 4, 5)
a, *b = c
# a -> 1, b -> [2, 3, 4, 5]
c = (1, 2, 3, 4, 5)
x, *y, z = c
# x -> 1, z -> 5, y -> [2, 3, 4]
一些比较实用的应用,比如遇到
Tom = [('Age', 24), ('Gender', 'Male'), ...]
这种,如果我只想获得第一个和最后一个属性却不想理会其他的部分,就可以用上面的 * 赋值法。
arg 实际上是arguments 的缩写,即参数的复数形式。所以一般也用 args 作为一种约定俗成的写法。当然你可以用其他文字代替。
更进一步,**kwargs实际上是 key word arguments,即带关键字的参数。这时候传递给函数的是一个变长字典。于是你可以猜测 **kwargs这种写法实际上是对字典的解包,实际上它就是,例如:
a = {'a': 0, 'b': 1, 'c': 2}
b = {'d': 4}
c = dict(**a, **b)
# c -> {'a': 0, 'b': 1, 'c': 2, 'd': 4}
# 利用字典解包合并字典,注意两者的关键词不能重复
当然,在函数参数的传递过程中,你写的时候看起来像是 funcA(a=1, b=2, c=3) ,实际上funcA的参数是一个字典{'a':1, 'b':2, 'c':3}
好了,以上就是小编给大家带来的全部内容,转发此文+关注 并私信小编“资料”即可免费领取2019最新python资料和零基础入门教程,不定期分享干货,欢迎初学和进阶中的小伙伴!
猜你喜欢
- 2025-07-21 Python基础课堂 第二节 变量 #python编程
- 2025-07-21 python变量的秘密?(python的变量有哪些)
- 2025-07-21 Python变量大变身!多次赋值后,内存空间竟然“换房”了?
- 2025-07-21 Python变量揭秘:内存里的“带标签盒子”,三要素缺一不可!
- 2025-07-21 Python教程(十三):变量作用域(python中变量作用域)
- 2025-07-21 Python自动化办公学习笔记11——布尔类型、变量赋值、类型转换
- 2025-07-21 Python教程(四):变量和数据类型简单解释
- 2025-07-21 Python 动态生成变量名以及动态获取变量的变量名
- 283℃Python短文,Python中的嵌套条件语句(六)
- 280℃python笔记:for循环嵌套。end=""的作用,图形打印
- 279℃PythonNet:实现Python与.Net代码相互调用!
- 274℃Python实现字符串小写转大写并写入文件
- 273℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 133℃原来2025是完美的平方年,一起探索六种平方的算吧
- 118℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 111℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
-
- python tkinter tk窗口组件的基础用法介绍
- 一起学python:Tkinter——轻装上阵,快速入门
- Python GUI 编程:tkinter 初学者入门指南——窗格窗口
- Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件
- Python,Tkinter的基础使用(python3 tkinter)
- 图文并茂:Python Tkinter从入门到高级实战全解析
- python tkinter桌面应用gui库基础介绍
- Python tkinter写个画图板,一个坑和实用知识解析
- python tkinter组件概述(python的tkinter模块详解)
- Flask中使用Blinker实现信号传递(flask传数据给前端)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)