Python3中*和**运算符的四种用法详解
本文详细解析Python中*和**运算符的四种核心用法:算术乘法与乘方、函数定义中的不定长参数*args与**kwargs、函数调用时的序列解包以及序列解包语法。通过代码示例说明其区别与注意事项,帮助开发者准确掌握Python语法多义性。
在Python语言中,*和**符号具备语法多义性,主要涵盖以下四种应用场景。
1. 算术运算场景
*符号用于执行乘法运算。
**符号用于执行乘方(幂)运算。
>>> 2 * 5 10 >>> 2 ** 5 32
2. 函数形参定义场景
*args和**kwargs通常用于函数定义阶段。
这两个符号允许向函数传递数量不确定的参数。所谓“不定数量”,是指函数调用前无法预知具体传入的参数个数,因此在此场景下需使用这两个符号。需要注意的是,*args和**kwargs并非强制的命名规范,星号*才是语法必需部分,变量名可自定义为例如*ar和**k,但*args和**kwargs已成为业界通用的命名约定。
Python函数传递参数主要包含两种机制:
位置参数(positional argument)
关键词参数(keyword argument)
*args与**kwargs均属于可变参数,但二者存在本质区别:
*args用于接收任意数量的非关键字参数,其本质为元组(tuple)类型。
**kwargs用于接收任意数量的关键字参数,其本质为字典(dict)类型。
在函数定义中同时使用*args和**kwargs时,必须确保*args参数列表位于**kwargs参数列表之前。
>>> def fun(*args, **kwargs):
... print('args=', args)
... print('kwargs=', kwargs)
...
>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
args= (1, 2, 3, 4)
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
使用*args的示例如下
>>> def fun(name, *args):
... print('你好:', name)
... for i in args:
... print("你的宠物有:", i)
...
>>> fun("Geek", "dog", "cat")
你好: Geek
你的宠物有: dog
你的宠物有: cat
使用**kwargs的示例如下
>>> def fun(**kwargs):
... for key, value in kwargs.items():
... print("{0} 喜欢 {1}".format(key, value))
...
>>> fun(Geek="cat", cat="box")
Geek 喜欢 cat
cat 喜欢 box
3. 函数实参传递场景
即使函数的形参定义为固定长度参数,仍可通过*args和**kwargs进行调用,这相当于对元组或字典执行解引用操作:
>>> def fun(data1, data2, data3):
... print("data1: ", data1)
... print("data2: ", data2)
... print("data3: ", data3)
...
>>> args = ("one", 2, 3)
>>> fun(*args)
data1: one
data2: 2
data3: 3
>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
>>> fun(**kwargs)
data1: 3
data2: 2
data3: one
4. 序列解包场景
关于序列解包此前已有介绍,此处仅展示一个示例。需注意,序列解包语法中不包含**符号。
>>> a, b, *c = 0, 1, 2, 3 >>> a 0 >>> b 1 >>> c [2, 3]
以上内容即为对Python3中*和**运算符的完整解析,供读者参考。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













