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

标签 python parameters expression parameter-passing

有许多 StackOverflow 问题询问有关将变量用作变量的问题(例如 thisthis ,但我不认为这是重复的。我想要了解我是否可以将变量的值用作函数参数。

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

  • name 表的列是 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 参数,但无法重构。)

最佳答案

您可以使用 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/

相关文章:

python - 棋盘上的皇后在 Python 中随机解决

python - 如何在azure管道中设置多个图像

python - 用数字对字符串中的重复字母进行编码

c - 传递给 C 函数时丢失 char 数组的值

java - 如何将参数传递给 JavaFX 应用程序?

即使在困惑的字符串中也能找到 YYYY-MM 的 Java 正则表达式

python - 如何有效地将大图像分割成多个部分并旋转它们?

linux - 形式参数使用...是什么意思

java - Java 中的 switch case 逻辑表达式语句 - 与 JS 或 PHP

java - 错误:illegal start of expression and “;” expected