考虑以下功能:
def test(first, second = None, third = None):
print first
print second
print third
test('one', third = 'three')
我希望能够使用我使用一些逻辑构建的列表(非工作伪代码)来调用它:
arguments = ['one']
arguments.append(third = 'three')
test(arguments)
如何实现这一目标?
答案 0 :(得分:4)
此
arguments.append(third = 'three')
是不可能的。使用字典:
args = {"third":"three"}
test("one", **args)
输出:
one
None
three
编辑:我没有看到为位置参数使用单独的结构。只要只有一个这样的论点,*["one"]
不会短于"one"
。
答案 1 :(得分:3)
使用列表作为位置参数,并使用字典作为命名参数。 (c.f。The Python Tutorial 4.7.4. Unpacking Argument Lists)
positionalArguments = ['one']
namedArguments = {
'third': 'three'
}
test(*positionalArguments, **namedArguments)
答案 2 :(得分:1)
首先,你做不到
arguments.append(third = 'three')
这不是有效的python指令。你要找的是一本字典
arguments = {'first': 'one'}
arguments['third'] = 'three'
好消息是,在python中,您可以通过传递位置参数列表和/或命名参数列表来调用函数。你会使用魔法* and ** symbols
按照您的示例,您将执行以下操作:
pargs = ['one']
kwargs = {'third': 'three'}
test(*pargs, **kwargs)