我正在阅读挖掘社交网络并遇到一个我无法弄清楚的python语法:
transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', '')]
"google, Inc.".replace(*transforms[0])
但如果我输入
*transforms[0]
在解释器中,它说它是无效的语法。我用谷歌搜索了它,但是python文档真的不适合这份工作。
那么星号在这里意味着什么呢?谢谢大家。
答案 0 :(得分:13)
python中的*argument
格式表示:使用序列argument
中的所有元素并将它们作为参数传递给函数。
在这种特定情况下,转换为:
"google, Inc.".replace(', Inc.', '')
这是最简单的证明:
>>> def foo(arg1, arg2):
... print arg1, arg2
...
>>> arguments = ('spam', 'eggs')
>>> foo(*arguments)
spam, eggs
您还可以使用**kw
双星格式传递关键字参数:
>>> def foo(arg1='ham', arg2='spam'):
... print arg1, arg2
...
>>> arguments = dict(arg2='foo', arg1='bar')
>>> foo(**arguments)
bar, foo
您可以在函数定义中使用相同的拼写来捕获任意位置和关键字参数:
>>> def foo(*args, **kw):
... print args, kw
...
>>> foo('arg1', 'arg2', foo='bar', spam='eggs')
('arg1', 'arg2'), {'foo': 'bar', 'spam': 'eggs'}
答案 1 :(得分:7)
星号解包一个可迭代的。我认为最好用一个例子来解释:
>>> 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
如您所见,我们定义了一个带有三个参数的函数和一个带有三个元素的元组。现在,如果我们想直接使用元组中的值,我们不能只传递元组并让它工作。我们可以单独传递每个元素,但这只是非常冗长。我们所做的是使用星号解包元组,并基本上使用元组中的元素作为参数。
使用未知数量的参数时,解包功能还有第二种用法:
>>> def example2 (*params):
for param in params:
print(param)
>>> example2('foo')
foo
>>> example2('foo', 'bar')
foo
bar
>>> example2(*myTuple)
foo
bar
baz
星号允许我们在这里定义一个参数,该参数获取所有传递的剩余值并将其打包成可迭代的值,因此我们可以迭代它。
答案 2 :(得分:3)
它将元组传递给参数列表。所以
"google, Inc.".replace(*transforms[0])
变为
"google, Inc.".replace(', Inc.', '')
通过这种方式,您可以以编程方式构造正在传递的参数列表(可变长度是关键优势)。
答案 3 :(得分:0)
检查Python教程的第4.7.4节:http://docs.python.org/tutorial/controlflow.html#more-on-defining-functions
But if I type
*transforms[0]
in the interpreter, it says it is invalid syntax.
变换[0]前面的*仅在函数调用中有意义。
使用列表中第一个元组中的数据进行此调用的另一种方法是:
“Google,Inc。”。replace(变换[0] [0],变换[0] [1])