如何在python中传递命名参数

时间:2017-09-22 10:25:49

标签: python-3.4

我有一个带有两个命名参数的函数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)

3 个答案:

答案 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