如何在 Python 函数中将字符串转换为可选参数名称?
How to convert a string to optional argument name in Python function?
我是 Python 的新手,想知道如何使用存储在某个变量中的字符串在函数中“动态”传递可选参数名称。
这是我的功能:
def my_func(arg1=4 arg2=8):
print(arg1 * arg2)
这就是我的代码现在的样子:
param_name = “arg1”
param_value = 5
if param_name == “arg1”:
my_func(arg1=param_value)
elif param_name == “arg2”:
my_func(arg2=param_value)
我的问题是,如果没有 if/elif,是否可以将上面的代码简化为如下所示:
param_name = “arg1”
param_value = 5
my_func(eval(param_name) = param_value)
PS: 我知道这不是如何使用 eval() 并且使用 eval 是不安全的并且在大多数情况下被认为是一种不好的做法,所以代码只是为了说明我需要通过一个可选的参数名称“动态”,带有来自先前定义的变量的字符串值。
如何在 Python 中做到这一点(并且以最安全的方式)?
提前致谢! :)
给你。尝试使用 python 中的 **
函数。
def my_func(arg1=4, arg2=8):
print(arg1 * arg2)
param = {"arg1": 5} # this is a dictionary
my_func(**param)
这会打印:40
最棒的是,您实际上可以同时指定多个参数!
def my_func(arg1=4, arg2=8):
print(arg1 * arg2)
params = {"arg1": 5, "arg2":10} # this is a dictionary
my_func(**params)
这会打印:50
似乎类似于:Passing a dictionary to a function as keyword parameters
这样的事情可能会有所帮助:
def myfunc(a=2,b=3):
print("a is {}\nb is {}".format(a,b))
pname = "b"
myvalue = 5
myargs = {pname:myvalue} # set your args here as key-value pair
myfunc(**myargs)
我是 Python 的新手,想知道如何使用存储在某个变量中的字符串在函数中“动态”传递可选参数名称。
这是我的功能:
def my_func(arg1=4 arg2=8):
print(arg1 * arg2)
这就是我的代码现在的样子:
param_name = “arg1”
param_value = 5
if param_name == “arg1”:
my_func(arg1=param_value)
elif param_name == “arg2”:
my_func(arg2=param_value)
我的问题是,如果没有 if/elif,是否可以将上面的代码简化为如下所示:
param_name = “arg1”
param_value = 5
my_func(eval(param_name) = param_value)
PS: 我知道这不是如何使用 eval() 并且使用 eval 是不安全的并且在大多数情况下被认为是一种不好的做法,所以代码只是为了说明我需要通过一个可选的参数名称“动态”,带有来自先前定义的变量的字符串值。
如何在 Python 中做到这一点(并且以最安全的方式)?
提前致谢! :)
给你。尝试使用 python 中的 **
函数。
def my_func(arg1=4, arg2=8):
print(arg1 * arg2)
param = {"arg1": 5} # this is a dictionary
my_func(**param)
这会打印:40
最棒的是,您实际上可以同时指定多个参数!
def my_func(arg1=4, arg2=8):
print(arg1 * arg2)
params = {"arg1": 5, "arg2":10} # this is a dictionary
my_func(**params)
这会打印:50
似乎类似于:Passing a dictionary to a function as keyword parameters
这样的事情可能会有所帮助:
def myfunc(a=2,b=3):
print("a is {}\nb is {}".format(a,b))
pname = "b"
myvalue = 5
myargs = {pname:myvalue} # set your args here as key-value pair
myfunc(**myargs)