【问题标题】:How to build arguments for a python function in a variable如何在变量中为python函数构建参数
【发布时间】:2015-03-11 20:43:46
【问题描述】:

我有一个 Python (3) 函数

def f(a, b, c=1, d=2):
    pass

我想在代码中建立一个参数列表。实际用例是基于一些命令行参数解析来执行此操作,但这是一个普遍的问题(我对 python 还很陌生),例如

myargs = {}
myargs['positionalParams'] = ['foo', 'bar']
myargs['c']=2
myargs['d']=3
f(myargs)

我知道我可以使用f(*somelist) 将列表扩展为单独的参数,但是如何混合使用位置参数和可选参数呢?还是我做两次,一次用于位置,一次用于其他人的字典?

【问题讨论】:

标签: python python-3.x


【解决方案1】:
args = ['foo', 'bar']
kwargs = {'c': 2, 'd': 3}
f(*args, **kwargs)

请注意,这也可以:

kwargs = {'a': 'foo', 'b': 'bar', 'c': 2, 'd': 3}
f(**kwargs)

【讨论】:

  • Ned Deily 讨论了一种在 similar topic 中保留 keyword=value 风格 here 的风格。
【解决方案2】:

如何混合使用位置参数和可选参数?

您也可以使用字典将值传递给位置参数,方法是像这样解包

>>> def func(a, b, c=1, d=2):
...     print(a, b, c, d)
...     
... 
>>> myargs = {"a": 4, "b": 3, "c": 2, "d": 1}
>>> func(**myargs)
4 3 2 1

还是我做两次,一次用于位置,一次用于其他人的听写?

是的。你也可以解压位置参数的值,像这样

>>> pos_args = 5, 6
>>> keyword_args = {"c": 7, "d": 8}
>>> func(*pos_args, **keyword_args)
5 6 7 8

或者您可以选择显式传递值,像这样

>>> func(9, 10, **keyword_args)
9 10 7 8

【讨论】:

    猜你喜欢
    • 2022-07-14
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多