gpt4 book ai didi

python - 在 python 中使用命名/未命名和变量参数调用函数

转载 作者:太空狗 更新时间:2023-10-30 01:59:32 25 4
gpt4 key购买 nike

我有以下代码:

def foo(func, *args, named_arg = None):
return func(*args)

返回一个SyntaxError:

  File "tester3.py", line 3
def foo(func, *args, named_arg = None):
^

这是为什么呢?是否有可能以这种方式定义一个函数,它接受一个参数 (func),然后在命名参数之前是一个变量参数列表 args?如果不是,我的可能性是什么?

最佳答案

包罗万象的 *args 参数必须出现在任何显式参数之后:

def foo(func, named_arg=None, *args):

如果您还将包罗万象的 **kw 关键字参数添加到定义中,则该参数必须位于 *args 之后参数:

def foo(func, named_arg=None, *args, **kw):

混合显式关键字参数和包罗万象的 *args 参数确实会导致意外行为;您不能同时使用任意位置参数显式命名您列出的关键字参数。

func 之外的任何额外位置首先用于 named_arg,它也可以作为位置参数:

>>> def foo(func, named_arg = None, *args):
... print func, named_arg, args
...
>>> foo(1, 2)
1 2 ()
>>> foo(1, named_arg=2)
1 2 ()
>>> foo(1, 3, named_arg=2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo() got multiple values for keyword argument 'named_arg'
>>> foo(1, 2, 3)
1 2 (3,)

这是因为 foo() 的任何第二个位置参数将始终用于named_arg

在 Python 3 中,*args 参数可以放在关键字参数之前,但这具有的含义。通常,关键字参数可以在调用签名中指定为位置参数(例如,将函数调用为 foo(somefunc, 'argument') 会将 'argument' 分配给 命名参数)。通过将 *args 或普通的 * 放在位置参数和命名参数之间,您可以排除命名参数被用作位置;调用 foo(somefunc, 'argument') 会引发异常。

关于python - 在 python 中使用命名/未命名和变量参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com