如何将命名参数传递给 python 中的函数
how to pass named parameters to function in python
我有一个带有两个命名参数的函数 A 和一个将优化 A 的结果并更改其参数的函数 B。无论我优化第一个还是第二个参数,算法都是一样的。我可以将所需参数的名称和值传递给 B 吗?
在看机器学习的scikit-learn函数时提出的问题。
我想要这样的东西:
def A(p1 = 0, p2 = 0):
print(p1 + p2)
def B(par_name, par_val):
...
B 将使用给定的参数调用 A。
B("p1", 1) => A(p1 = 1, p2 = 0)
B("p2", 1) => A(p1 = 0, p2 = 1)
是的,调用其他函数时可以使用命名参数:
def A(p1, p2):
print("p1=%s, p2=%s" % (p1, p2))
def B():
A(p2="two", p1="one")
>>> B()
p1=one, p2=two
您可以使用所需的关键字参数调用 A。在类似的情况下,我将调用函数的参数放在字典中并将其传递给被调用函数
def A(p1 = 0, p2 = 0):
print(str(p1) + str(p2))
def B(par_name, par_val):
para_dict = dict()
para_dict[para_name] = para_val
A(**para_dict)
有关详细信息,请参阅 python 文档中的 Key Word Arguments。
另一种方式是,您的字典已经拥有所有键 p1、p2 及其默认值,您只需更新您想要的键并将其传递给 A
para_dict = {"p1":0,"p2":0}
循环遍历 A
中的参数可能会更好
参数个数和名称是固定的?如果是这样,最好的方法就是像 Joe Platano 提到的那样通过命令。
否则你也可以做
>>> def A(p={}):
# to print?
... print(p.get('p1',0),' + ',p.get('p2',0))
# or to compute?
... print(p.get('p1',0) + p.get('p2',0))
...
>>> def B(key, value):
... A(p={key:value})
...
>>> B('p1',1)
1 + 0
1
>>> B('p2',1)
0 + 1
1
我有一个带有两个命名参数的函数 A 和一个将优化 A 的结果并更改其参数的函数 B。无论我优化第一个还是第二个参数,算法都是一样的。我可以将所需参数的名称和值传递给 B 吗? 在看机器学习的scikit-learn函数时提出的问题。
我想要这样的东西:
def A(p1 = 0, p2 = 0):
print(p1 + p2)
def B(par_name, par_val):
...
B 将使用给定的参数调用 A。
B("p1", 1) => A(p1 = 1, p2 = 0)
B("p2", 1) => A(p1 = 0, p2 = 1)
是的,调用其他函数时可以使用命名参数:
def A(p1, p2):
print("p1=%s, p2=%s" % (p1, p2))
def B():
A(p2="two", p1="one")
>>> B()
p1=one, p2=two
您可以使用所需的关键字参数调用 A。在类似的情况下,我将调用函数的参数放在字典中并将其传递给被调用函数
def A(p1 = 0, p2 = 0):
print(str(p1) + str(p2))
def B(par_name, par_val):
para_dict = dict()
para_dict[para_name] = para_val
A(**para_dict)
有关详细信息,请参阅 python 文档中的 Key Word Arguments。
另一种方式是,您的字典已经拥有所有键 p1、p2 及其默认值,您只需更新您想要的键并将其传递给 A
para_dict = {"p1":0,"p2":0}
循环遍历 A
中的参数可能会更好参数个数和名称是固定的?如果是这样,最好的方法就是像 Joe Platano 提到的那样通过命令。 否则你也可以做
>>> def A(p={}):
# to print?
... print(p.get('p1',0),' + ',p.get('p2',0))
# or to compute?
... print(p.get('p1',0) + p.get('p2',0))
...
>>> def B(key, value):
... A(p={key:value})
...
>>> B('p1',1)
1 + 0
1
>>> B('p2',1)
0 + 1
1