这个 Python 代码中的 * 是用来获得清晰的输出的吗?

7 浏览
0 Comments

这个 Python 代码中的 * 是用来获得清晰的输出的吗?

这个问题已经得到了回答

** (双星号)和* (星号)在参数中有什么作用?

在Python中,*有像C语言中那样的特殊含义吗?我在Python Cookbook中看到这样一个函数:

def get(self, *a, **kw)

请您解释它的含义,或者指出我可以找到答案的地方(Google将*解释为通配字符,因此我找不到令人满意的答案)。

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

我只有一件事要补充,其他回答中没有提到(为了完整性)。

在调用函数时,您也可以使用星号。例如,假设您有以下代码:

>>> def foo(*args):
...     print(args)
...
>>> l = [1,2,3,4,5]

您可以将列表l传递给foo,像这样...

>>> foo(*l)
(1, 2, 3, 4, 5)

您也可以对字典执行相同操作...

>>> def foo(**argd):
...     print(argd)
...
>>> d = {'a' : 'b', 'c' : 'd'}
>>> foo(**d)
{'a': 'b', 'c': 'd'}

0
0 Comments

查看 函数定义 语言参考。

如果使用了形式为*identifier
它被初始化为一个元组,将收到任何额外的位置参数,默认为空
元组。如果使用了形式为**identifier
它被初始化为一个新字典,可收到任何额外的关键字参数,默认为新建
空字典。

另请参阅 函数调用

假设已知什么是位置参数和关键字参数,以下是一些示例:

示例 1:

# Excess keyword argument (python 2) example:
def foo(a, b, c, **args):
    print "a = %s" % (a,)
    print "b = %s" % (b,)
    print "c = %s" % (c,)
    print args
foo(a="testa", d="excess", c="testc", b="testb", k="another_excess")

如上例所示,函数foo的签名中只有参数a、b、c。由于dk不存在,它们被放入args字典中。程序的输出为:

a = testa
b = testb
c = testc
{'k': 'another_excess', 'd': 'excess'}

示例 2:

# Excess positional argument (python 2) example:
def foo(a, b, c, *args):
    print "a = %s" % (a,)
    print "b = %s" % (b,)
    print "c = %s" % (c,)
    print args
foo("testa", "testb", "testc", "excess", "another_excess")

在这里,由于我们测试的是位置参数,多余的参数必须在最后,*args将它们打包成一个元组,因此此程序的输出为:

a = testa
b = testb
c = testc
('excess', 'another_excess')

您还可以将字典或元组解包成函数的参数:

def foo(a,b,c,**args):
    print "a=%s" % (a,)
    print "b=%s" % (b,)
    print "c=%s" % (c,)
    print "args=%s" % (args,)
argdict = dict(a="testa", b="testb", c="testc", excessarg="string")
foo(**argdict)

输出为:

a=testa
b=testb
c=testc
args={'excessarg': 'string'}

def foo(a,b,c,*args):
    print "a=%s" % (a,)
    print "b=%s" % (b,)
    print "c=%s" % (c,)
    print "args=%s" % (args,)
argtuple = ("testa","testb","testc","excess")
foo(*argtuple)

输出为:

a=testa
b=testb
c=testc
args=('excess',)

0