如何使用命名参数列表调用函数?

时间:2014-08-01 10:01:48

标签: python

考虑以下功能:

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)

如何实现这一目标?

3 个答案:

答案 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)