我有一个代码,我正在学习,而且我完全被困在这里。
代码是:
def f(*a):
print a
print (*[1,2]) # prints (1,2)
为什么?我不知道这背后的过程。我知道*args
使变量长度参数成为元组,但(*[1,2])
执行了什么?
答案 0 :(得分:0)
我想你想写这个:
print f(*[ 1, 2]) # Python 2
print(f(*[ 1, 2])) # Python 3
*
的作用是unpacking。在这种情况下,您正在解压缩列表。它通常用于将列表作为“独立”参数传递给函数,例如:
def f(a, b):
print a
print b
您可以将其称为
f(*[1, 2]) # with unpacking
相当于
f(1, 2)
答案 1 :(得分:0)
这称为参数解包 - 请参阅参考at the documentation。
简而言之,print f(*[1,2])
获取列表中的每个元素,并将其作为单个参数传递给方法f
。
方法f
采用多个位置参数,在正文中分配名称a
。
因此,当您输入f(*[1,2])
时,这与f(1,2)
相同。另一方面,f
收到1,2
作为元组a
并打印出来:
>>> def f(*a):
... print(a)
...
>>> f(*[1,2])
(1, 2)