"replace(*something)" 中的星号在Python中有什么作用?

10 浏览
0 Comments

"replace(*something)" 中的星号在Python中有什么作用?

这个问题已经有了答案

可能是重复问题:

*args 和 **kwargs 的含义是什么?

我正在阅读《挖掘社交网络》这本书,遇到了我无法理解的 Python 语法:

transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', '')]
"google, Inc.".replace(*transforms[0])

但如果我在解释器中键入

*transforms[0]

它会说这是无效的语法。我通过谷歌搜索了解,但是 Python 文档并没有给出详细的解释。

那么这里的星号是什么意思,请大家帮忙解答。谢谢。

admin 更改状态以发布 2023年5月24日
0
0 Comments

星号将可迭代对象解包。我认为最好通过一个示例来解释:

>>> 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 "", line 1, in 
    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

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

0
0 Comments

*argument格式在Python中的意思是:使用序列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'}

0