将自定义关键字参数传递给函数

时间:2013-09-13 12:01:20

标签: python arguments keyword keyword-argument

我有一个具有update_database()函数的程序,但我不知道关键字参数在运行时会是什么,因此有一次调用该函数时可能需要:

table_name = 'example1'
update_database(table_name, column1='...', column3='...')

但另一次可能是:

table_name = 'example2'
update_database(table_name, column5='...', column2='...')

因此函数调用需要是常规参数和关键字参数的混合。我可以作为列表访问的关键字参数名称,所以我可以将它们格式化为任何我喜欢的旧方法,但我不确定在python中是否可以实现这种行为。

有人知道这是否可能如何?

更新:

还值得注意的是update_database()函数是导入模块的一部分,所以我无法修改它的定义,我可以用某种方式包装它,但我不确定这是否能让我获得任何东西。

1 个答案:

答案 0 :(得分:3)

您始终可以在原始函数中使用未定义数量的关键字参数,例如:

(在关键字参数的情况下,您有一个简单的字典而不是列表)

def update_database(tname, **columns):
    for key, value in columns.items():
        # do something with key-value pairs

更新:

所以我想,这就是我们在评论部分讨论的内容,我是否正确?

# Create dictionaries with keys as keywords and values as argument values
kwargs0 = {'arg0': 0, 'arg1': 2, 'arg2': 5}
kwargs1 = {'arg99': 1, 'arg13': None, 'arg0': 7}

# Call the function and UNPACK the dictionaries
update_database('db_name', **kwargs0)
update_database('db_name', **kwargs1)