0

我有一个具有update_database()函数的程序,但直到运行时我才知道关键字参数是什么,所以有一次调用该函数时可能需要:

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

但另一次可能是:

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

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

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

更新:

还值得注意的是,该update_database()函数是导入模块的一部分,所以我不能修改它的定义,我可以以某种方式包装它,但我不确定这是否能给我带来任何好处。

4

1 回答 1

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)
于 2013-09-13T12:04:21.100 回答