我可以用变量的值作为函数的参数名吗?

2024-09-30 18:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

关于使用变量作为变量(如thisthis),有很多StackOverflow问题,但我不认为这是重复的。我想知道是否可以使用变量的值作为函数参数。你知道吗

例如,假设我想调用一个函数来填充两个不同的MySQL表中的一个:

  • 名称表的列是idfullname。你知道吗
  • phone表的列是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)

当然,最后一行不是有效的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()不在我的控制之下-它将接受dateidphonenumfullname参数,但不能重构。)


Tags: ornameidnewdatadatetimedatetype
1条回答
网友
1楼 · 发布于 2024-09-30 18:16:50

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

相关问题 更多 >