如何将命名参数传递给 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