可能重复:
*args和**kwargs是什么意思?
我正在阅读挖掘社交网络并遇到一个我无法弄清楚的python语法:
transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', '')]
"google, Inc.".replace(*transforms[0])
Run Code Online (Sandbox Code Playgroud)
但如果我输入
*transforms[0]
Run Code Online (Sandbox Code Playgroud)
在解释器中,它说它是无效的语法.我用Google搜索了,但是python文档真的不适合这份工作.
那么星号在这里意味着什么呢?谢谢你们.
Mar*_*ers 14
*argument
python中的格式表示:使用序列中的所有元素argument
并将它们作为参数传递给函数.
在这种特定情况下,转换为:
"google, Inc.".replace(', Inc.', '')
Run Code Online (Sandbox Code Playgroud)
这是最容易证明的:
>>> def foo(arg1, arg2):
... print arg1, arg2
...
>>> arguments = ('spam', 'eggs')
>>> foo(*arguments)
spam, eggs
Run Code Online (Sandbox Code Playgroud)
您还可以使用**kw
双星格式传递关键字参数:
>>> def foo(arg1='ham', arg2='spam'):
... print arg1, arg2
...
>>> arguments = dict(arg2='foo', arg1='bar')
>>> foo(**arguments)
bar, foo
Run Code Online (Sandbox Code Playgroud)
并且您可以在函数定义中使用相同的拼写来捕获任意位置和关键字参数:
>>> def foo(*args, **kw):
... print args, kw
...
>>> foo('arg1', 'arg2', foo='bar', spam='eggs')
('arg1', 'arg2'), {'foo': 'bar', 'spam': 'eggs'}
Run Code Online (Sandbox Code Playgroud)
星号解包迭代.我认为最好用一个例子来解释:
>>> def exampleFunction (paramA, paramB, paramC):
print('A:', paramA)
print('B:', paramB)
print('C:', paramC)
>>> myTuple = ('foo', 'bar', 'baz')
>>> myTuple
('foo', 'bar', 'baz')
>>> exampleFunction(myTuple)
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
exampleFunction(myTuple)
TypeError: exampleFunction() takes exactly 3 arguments (1 given)
>>> exampleFunction(myTuple[0], myTuple[1], myTuple[2])
A: foo
B: bar
C: baz
>>> exampleFunction(*myTuple)
A: foo
B: bar
C: baz
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我们定义一个函数,3个参数,并有三个元素的元组.现在,如果我们想直接使用元组中的值,我们不能只传递元组并让它工作.我们可以单独传递每个元素,但这只是非常冗长.我们所做的是使用星号来解包元组,并基本上使用元组中的元素作为参数.
使用未知数量的参数时,解包功能还有第二种用法:
>>> def example2 (*params):
for param in params:
print(param)
>>> example2('foo')
foo
>>> example2('foo', 'bar')
foo
bar
>>> example2(*myTuple)
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
星号允许我们在这里定义一个参数,该参数获取传递的所有剩余值并将其打包成可迭代的值,因此我们可以迭代它.