在 Python 中,*
符号在多种上下文中具有不同的含义,但当你提到“*类型对象”时,我猜测你可能是在谈论函数定义中的可变参数(variable arguments)或者函数调用中的参数解包(argument unpacking)。
- 可变参数(Variable Arguments):
在函数定义中,*args
允许你将任意数量的非关键字参数作为一个元组传递给函数。
def func(*args):
for arg in args:
print(arg)
func(1, 2, 3, 4) # 输出:1 2 3 4
- 关键字参数解包(Keyword Argument Unpacking):
在函数调用中,你可以使用 **kwargs
来解包字典作为关键字参数传递给函数。
def func(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
params = {
"a": 1, "b": 2, "c": 3}
func(**params) # 输出:a = 1 b = 2 c = 3
- 参数解包(Argument Unpacking):
在函数调用中,你也可以使用 *
来解包列表或元组作为位置参数,或者使用 **
来解包字典作为关键字参数。
def func(a, b, c):
print(a, b, c)
args = [1, 2, 3]
kwargs = {
"c": 4}
func(*args, **kwargs) # 输出:1 2 4
注意,在上面的例子中,虽然 args
列表包含了三个元素,但我们只使用了前两个,因为 kwargs
中的 "c": 4
覆盖了 args
中的第三个元素。
- 迭代解包(Iterable Unpacking):
在元组、列表、集合或其他可迭代对象的赋值操作中,*
可以用于解包可迭代对象中的元素。
a, *b, c = [1, 2, 3, 4, 5]
print(a) # 输出:1
print(b) # 输出:[2, 3, 4]
print(c) # 输出:5
在这个例子中,a
接收了列表的第一个元素,c
接收了列表的最后一个元素,而 *b
则接收了列表中的所有其他元素。