2016-05-03 99 views
3

有一些StackOverflow问题询问有关使用变量作为变量(如thisthis,但我不认为这是重复的这些。我想知道如果我可以使用的值。变量作为函数参数我可以使用变量的值作为函数的参数名称吗?

例如,假设我要打电话将填充两种不同的MySQL表一个函数:

  • 表的列idfullname
  • 手机表的列idphonenum
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) 

课程,最后一行是无效的蟒蛇,但我的目标是动态生成的函数调用:

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()是不是我的控制之下 - 它将接受dateidphonenumfullname参数,但不能进行重构。)

回答

1

可以使用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}) 
+0

完美的作品 - 谢谢! –

相关问题