Star(*)作为python函数中的参数

BiB*_*iBi 2 python

我在看glob函数的定义,我注意到第二个参数很简单*.

def glob(pathname, *, recursive=False):
    """Return a list of paths matching a pathname pattern.
    [...]
    """
    return list(iglob(pathname, recursive=recursive))
Run Code Online (Sandbox Code Playgroud)

有什么意义*

Pik*_*les 10

后面的所有参数都*必须明确指定其名称。例如,如果你有这个函数:

def somefunction(a,*,b):
    pass
Run Code Online (Sandbox Code Playgroud)

你可以这样写:

somefunction(0, b=0)
Run Code Online (Sandbox Code Playgroud)

但不是这个:

somefunction(0, 0)
Run Code Online (Sandbox Code Playgroud)

  • 您已经回答了 2 篇具有相同问题的帖子:/sf/ask/3765688181/#53795611 您应该标记为重复:-) (2认同)

Ada*_*ith 9

*指示的位置参数的结尾.之后的每个参数只能通过关键字指定.这在PEP 3102中定义

>>> def foo1(a, b=None):
...     print(a, b)
...
>>> def foo2(a, *, b=None):
...     print(a, b)
...
>>> foo1(1, 2)
1 2
>>> foo2(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo1() takes 1 positional argument but 2 were given
>>> foo2(1, b=2)
1 2
Run Code Online (Sandbox Code Playgroud)

  • @AdamSmith我认为你的意思是关键字唯一的参数,即PEP 3102.PEP 570似乎使用`/`来定义"仅限位置参数" (3认同)
  • 有趣的是,TensorFlow 使用“_sentinel”作为其某些函数的第一个参数,以防止位置参数。我想知道为什么他们不简单地使用“*”。 (2认同)
  • @BiBi:Python 2 支持。Python 2 没有这种语法。 (2认同)

归档时间:

查看次数:

1043 次

最近记录:

7 年,5 月 前