Python 调出位置参数

Python calling out positional argument

我有一个 python 函数 (python 2.5),其定义如下:

def Foo(a, b='Silly', c='Walks', d='Spam', e='Eggs', f='Ni', *addl):

其中 addl 可以是任意数量的字符串(文件名)来做某事。

我可以接受所有默认设置,但我有文件名要放入 addl

我倾向于做这样的事情:

Foo('me@domain.com', addl=('File1.txt', 'File2.txt'))

但是出现以下错误:

TypeError: Foo() got an unexpected keyword argument 'addl'

是否有一种语法可以让我仅使用第一个必需参数和我的(可变数量的)附加字符串来简洁地调用 Foo 还是我在进入 addl 参数范围之前冗余地指定了所有默认值?

为了论证,不能修改或重构函数定义。

据我所知这是不可能的。

首先你需要传递必需的 (a) 和默认的 (b, c, d, e, f) 参数,然后每个额外的参数都作为 *addl:

Foo('me@domain.com', 'Silly', 'Walks', 'Spam', 'Eggs', 'Ni', 'File1.txt', 'File2.txt')

好的,如果不能修改函数,那为什么不创建包装器呢?

def foo_with_defaults(a, *addl):
    Foo(a, *(Foo.func_defaults + addl))

foo_with_defaults('me@domain.com', *('File1.txt', 'File2.txt'))

您试图将 addl 用作关键字参数,但您将其定义为位置参数。如果你想调用像 Foo(addl=('File1.txt', 'File2.txt')):

这样的函数,你应该再添加一个 *
def Foo(a, b='Silly', c='Walks', d='Spam', e='Eggs', f='Ni', **addl):