有许多 StackOverflow 问题询问有关将变量用作变量的问题(例如 this 和 this ,但我不认为这是重复的。我想要了解我是否可以将变量的值用作函数参数。
例如,假设我想调用一个函数来填充两个不同的 MySQL 表之一:
- name 表的列是
id
和fullname
。 - phone 表的列是
id
和phonenum
data = get_data() # data = a full name or a phone number
data_type = get_data_type(data) # data_type = "name" or "phone"
....
column_names_for_tables = {'name': 'fullname', 'phone': 'phonenum'}
column_name = column_names_for_tables[data_type]
# column_name now = "fullname" or "phonenum", depending on the value of #data
new_entry = MakeNewEntry(date=datetime.datetime.now(), id=123, <column_name>=data)
当然,最后一行不是有效的 Python,但我的目标是动态生成函数调用:
new_entry = MakeNewEntry(date=datetime.datetime.now(), id=123, fullname=data)
或
new_entry = MakeNewEntry(date=datetime.datetime.now(), id=123, phonenum=data)
也就是说,我想使用 column_name
的值作为我的参数名称。
我可以这样做吗?
(对于这个例子,请假设 MakeNewEntry()
不在我的控制之下——它将接受 date
、id
和phonenum
或 fullname
参数,但无法重构。)
最佳答案
您可以使用 double star operator将任意参数传递给函数:
col = 'foo'
val = 'bar'
kwargs = {col: bar}
some_function(**kwargs)
你可以通过像这样内联字典来缩短它:
some_function(**{col: var})
您可以混合和匹配语法并最终得到如下内容:
MakeNewEntry(date=datetime.datetime.now(), id=123, **{column_name: data})
关于python - 我可以使用变量的值作为函数的参数名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37014669/