Python3中*和**运算符的四种用法详解

江岸
江岸
发布时间:2026-10-13 | 4人浏览过
原创

本文详细解析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中*和**运算符的完整解析,供读者参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表