我有一个带有两个命名参数的函数A和一个函数B,它将优化A的结果,改变它的参数。无论我优化第一个还是第二个参数,算法都是相同的。我可以传递给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)
答案 0 :(得分:1)
您可以使用所需的关键字参数调用A.在类似的情况下,我将来自调用函数的参数放在dict中并将其传递给被调用的函数
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。
另一种方式是,你的dict已经拥有所有键p1,p2及其默认值,你只需更新你想要的键并将其传递给A
para_dict = {"p1":0,"p2":0}
并且循环遍历A
中的参数可能更好答案 1 :(得分:0)
是的,在调用另一个函数时可以使用命名参数:
def A(p1, p2):
print("p1=%s, p2=%s" % (p1, p2))
def B():
A(p2="two", p1="one")
>>> B()
p1=one, p2=two
答案 2 :(得分:0)
参数的数量和名称是否固定?如果是这样,最好的方法是通过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