“中的星号是什么?”;替换(*某物)“;对于(python)

“中的星号是什么?”;替换(*某物)“;对于(python),python,Python,可能重复: 我刚刚阅读了《挖掘社交网站》,遇到了一个我无法理解的python语法: transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', '')] "google, Inc.".replace(*transforms[0]) 但是如果我打字 *transforms[0] 在解释器中,它说这是无效语法。我在谷歌上搜索了一下,但是python文档确实不适合这份工作 那么星号在这里是什么意思?谢谢大家。它将传

可能重复:

我刚刚阅读了《挖掘社交网站》,遇到了一个我无法理解的python语法:

transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', '')]

"google, Inc.".replace(*transforms[0])
但是如果我打字

*transforms[0]
在解释器中,它说这是无效语法。我在谷歌上搜索了一下,但是python文档确实不适合这份工作


那么星号在这里是什么意思?谢谢大家。

它将传递的元组转换为参数列表。所以

"google, Inc.".replace(*transforms[0])
变成

"google, Inc.".replace(', Inc.', '')

通过这种方式,您可以通过编程方式构造正在传递的参数列表(可变长度是一个关键优势)。

python中的
*参数
格式意味着:使用序列
参数
中的所有元素,并将它们作为参数传递给函数

在这种情况下,这意味着:

"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'}
您可以在函数定义中使用相同的拼写来捕获任意位置参数和关键字参数:

>>> 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'}

查看Python教程的第4.7.4节:

变换[0]前面的*仅在函数调用中有意义

使用列表中第一个元组中的数据进行此调用的另一种方法是:


“Google,Inc.”。替换(转换[0][0],转换[0][1])

星号解压一个iterable。我认为最好用一个例子来解释:

>>> 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

星号允许我们在这里定义一个参数,该参数接受传递的所有剩余值,并将其打包成一个iterable,这样我们就可以对它进行迭代。

不仅仅是一个元组或列表-任何iterable。我不明白为什么它在语法中的任何地方都不起作用。例如
l=[1,*[2,3],4]
应该可以工作,并给我
l=[1,2,3,4]
,但它会变成一个语法错误。因为这种解包语法上下文实际上只在函数参数中启用,所以看起来是这样的。为什么在我的例子中,heckNote必须使用
fn(*args)
代码并传入字符串变量,我必须传入:
([myStringVariable])