有很多StackOverflow问题询问使用变量作为变量(例如this和this,但是我不认为这是这些变量的重复。我想知道是否可以将变量的值用作函数参数。
例如,假设我要调用一个函数,该函数将填充两个不同的MySQL表之一:
id
和fullname
。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
参数,但不能进行重构。)
您可以使用双星运算符将任意参数传递给函数:
col = 'foo'
val = 'bar'
kwargs = {col: bar}
some_function(**kwargs)
您可以像这样通过内联字典来缩短该时间:
some_function(**{col: var})
您可以混合使用语法,最后得到类似以下内容:
MakeNewEntry(date=datetime.datetime.now(), id=123, **{column_name: data})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句