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):
我有一个 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):