在 Python 中,* 和 ** 是功能强大、用途广泛的符号。它们不仅用于数学运算,还深度参与了函数定义、参数传递、序列解包等多个核心语法机制。
一、* 运算符的 7 种用途
1、数值运算
print(3 * 4) # 输出:12最基本的用法,数值之间的乘法运算。
2、序列重复
print("Hi" * 3) # 输出:HiHiHi
print([1, 2] * 2) # 输出:[1, 2, 1, 2]
print((0,) * 4) # 输出:(0, 0, 0, 0)可用于生成多个重复元素的新序列(字符串、列表、元组)。
3、赋值语句中的序列解包
a, *b, c = [1, 2, 3, 4, 5]
print(a) # 1
print(b) # [2, 3, 4]
print(c) # 5在赋值语句中使用 * 表示在解包过程中捕获不定数量的中间元素。常用于灵活拆分序列。
4、表达式中序列解包
a = [1, 2]
b = [3, 4]
print([*a, *b]) # 输出: [1, 2, 3, 4]在表达式中使用 *,表示把可迭代对象的元素解包出来。
5、函数调用中位置参数解包
def greet(a, b, c):
print(a, b, c)
lst = ["Hello", "Python", "!"]
greet(*lst) # 相当于 greet("Hello", "Python", "!")* 可在函数调用中将列表、元组等可迭代对象解包为位置参数,每个元素依次传入函数对应的参数位置。
6、函数定义中的 *args
def add_all(*args):
return sum(args)
print(add_all(1, 2, 3)) # 输出:6*args 表示接收任意数量的位置参数,打包成元组。通常用于不定参数函数。
7、函数定义中的仅限关键字参数
在函数定义中,* 单独使用时,表示之后的参数必须通过关键字方式传入,常用于接口更清晰、安全的设计。
def display(*, title, msg):
print(f"{title}: {msg}")
display(title="提示", msg="操作成功") # ✅
# display("提示", "操作成功") ❌ 报错二、** 运算符的 4 种用途
1、数学运算中的乘方(幂)
print(2 ** 3) # 输出:8(2 的 3 次方)a ** b 表示 a 的 b 次幂。
2、表达式中用于字典合并(Python 3.5+)
a = {'x': 1, 'y': 2}
b = {'y': 99, 'z': 3}
c = {**a, **b}
print(c) # 输出:{'x': 1, 'y': 99, 'z': 3}**dict 可在字面量中将字典展开。键重复时,后者会覆盖前者。
3、函数调用中的字典解包传参
def greet(name, age):
print(f"{name} is {age} years old.")
data = {"name": "xiaohong", "age": 18}
greet(**data) # 相当于 greet(name="xiaohong", age=18)**data 会将字典中的键值对解包为关键字参数。注意:这不是位置参数,而是以键值对的形式传入。
4、函数定义中的可变关键字参数
def show_info(**kwargs):
for k, v in kwargs.items():
print(f"{k} = {v}")
show_info(name="mediaTEA", age=7)**kwargs 会把所有的关键字参数收集成一个字典。适用于不确定参数名的情况。
提示:
函数定义中若同时使用 *args 与 **kwargs,顺序必须是:*args 在前,**kwargs 在后。
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.