Python使用*

Python使用*,python,keyword-argument,Python,Keyword Argument,我有一个我正在学习的代码,我完全被困在这里 代码是: def f(*a): print a print (*[1,2]) # prints (1,2) 为什么??我不知道这背后的过程。我知道*arg将可变长度的参数转换成元组,但是*1,2]的作用是什么?我想您应该这样写: print f(*[ 1, 2]) # Python 2 print(f(*[ 1, 2])) # Python 3 这个*所做的,叫做。在本例中,您正在解包一个列表。它通常用于将列表作为独立参数传递给函数,例如:

我有一个我正在学习的代码,我完全被困在这里

代码是:

def f(*a):
    print a
print (*[1,2]) # prints (1,2)

为什么??我不知道这背后的过程。我知道*arg将可变长度的参数转换成元组,但是*1,2]的作用是什么?

我想您应该这样写:

print f(*[ 1, 2]) # Python 2
print(f(*[ 1, 2])) # Python 3
这个*所做的,叫做。在本例中,您正在解包一个列表。它通常用于将列表作为独立参数传递给函数,例如:

def f(a, b):
    print a
    print b
你可以这样称呼它

f(*[1, 2])  # with unpacking
这相当于

f(1, 2)

这称为参数解包-请参阅参考资料

简而言之,print f*[1,2]获取列表中的每个元素,并将其作为单个参数传递给方法f

方法f采用多个位置参数,这些参数在主体中被指定为名称a

因此,当您键入f*[1,2]时,这与f1,2相同。在另一侧,f接收1,2作为元组a并打印它:

>>> def f(*a):
...    print(a)
...
>>> f(*[1,2])
(1, 2)

您是否缺少最后一行中的函数调用?您的代码不会按原样运行。但解压不是只有在您调用zip*东西时才会发生吗?*本身也会执行吗?或者解压与解压是不同的概念?完全不同。只要玩玩它,你就会明白为什么。请注意,当你做zip*的东西时,你是第一次打开包装和拉链。每个过程都是不同的。