【发布时间】:2016-07-24 04:01:11
【问题描述】:
我有一个 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 参数范围之前指定所有默认值?
为了论证,函数定义不能修改或重构。
【问题讨论】:
-
只需解压元组,它应该可以工作:Foo('me@domain.com', *('File1.txt', 'File2.txt'))
-
@AndreyT:那行不通。它将
'File1.txt'分配给a,并将'File2.txt'分配给b。 -
是的,你说得对。因此,在 2.5 的情况下,可能的解决方案是使用 kwargs 而不是 b、c、d、e、f 参数。
-
@AndreyT 不是
Python 2.5特有的,对吧?我们可以说它适用于Python>2.5吗?我在Python 2.7上试过这个,并将File2.txt分配给b。 -
@malhar:这有点特定于 2.x。在 3.x 中,我们可以使用以下定义:def f(a, *args, b=1, c=2, etc=3)
标签: python parameters arguments positional-parameter