学习的木可 发表于 2025-6-7 12:47:26

为什么other前面要加*号

为什么other前面要加*号

FishC 发表于 2025-6-7 12:48:08

在编程中,`*other` 的星号(`*`)是 Python 的特殊语法,作用如下:

1. 收集多余参数
当定义函数时,`*other` 会将传入的所有多余位置参数打包成一个元组(tuple):

def demo(a, b, *other):
    print("固定参数:", a, b)
    print("多余参数:", other)

demo(1, 2, 3, 4, 5)

输出:

固定参数: 1 2
多余参数: (3, 4, 5)# 自动转为元组


2. 解包参数(函数调用时)
在调用函数时,`*` 可解包序列(如列表/元组)为独立参数:

numbers =
print(*numbers)# 等价于 print(10, 20, 30)


关键区别:

场景星号作用
函数定义中 `*other`收集多余参数成元组
函数调用中 `*list`解包序列为独立参数


类比理解:
想象你点披萨时:
- 固定参数:必须选尺寸(如12寸)
- `*toppings`:可选任意配料(火腿、菠萝...),店家会打包成一份配料清单

这就是为什么需要 `*` —— 它让函数能处理不确定数量的参数!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 2025-6-7 14:37:40

这里的星号 * 出现在函数定义的形参位置,表示“可变数量的位置参数”。意思是:

update 可以一次接受任意多个“可迭代对象”,把它们里的元素全部添加进原来的集合。

代码:

s = {1, 2}
s.update(, (5, 6), 'ab')   # 依次把列表、元组、字符串中的元素并入
print(s)   # {1, 2, 3, 4, 5, 6, 'a', 'b'}
在定义处写 *others → 把调用方传来的多个参数“打包”成一个元组 others。

在调用时,你不需要再写星号:直接把若干可迭代对象逗号分隔地传进去即可。

如果鱼油手头已经有一个装着若干可迭代对象的列表/元组,想把它们“拆包”后再传给 update,这时才会在调用端再用一次星号:

iterables = (, {9, 10})
s.update(*iterables)   # 把列表里的两个可迭代对象依次传入
简而言之,* 在这里只是告诉我们:update 接受“一个或多个”额外参数,而不是固定只接收一个。
页: [1]
查看完整版本: 为什么other前面要加*号