Python 固定输入函数的dict
我有一些函数,我想通过字典调用,但传递固定值Python 固定输入函数的dict,python,Python,我有一些函数,我想通过字典调用,但传递固定值 def doSum(a,b): print a+b def doProd(a,b): print a*b 如果我通过 d = {'sum': doSum,'prod':doProd} d['prod'](2,4) 它很好用,可以打印8张 但是如果我尝试像 d = {'sum': doSum(2,4),'prod':doProd(2,4)} d['prod'] 它打印6和8。如何更改代码,使其仅运行我用dict中带
def doSum(a,b):
print a+b
def doProd(a,b):
print a*b
如果我通过
d = {'sum': doSum,'prod':doProd}
d['prod'](2,4)
它很好用,可以打印8张
但是如果我尝试像
d = {'sum': doSum(2,4),'prod':doProd(2,4)}
d['prod']
它打印6和8。如何更改代码,使其仅运行我用dict中带有固定参数的键指定的函数?用于存储带有要传入的默认值的函数
您仍然需要调用该函数:
from functools import partial
d = {'sum': partial(doSum, 2, 4),'prod': partial(doProd, 2, 4)}
d['sum']()
调用partial
对象时,该对象将返回并调用包装函数,传入已与partial
一起存储的参数,以及传入的任何其他参数:
>>> addtwo = partial(doSum, 2)
>>> addtwo(6)
8
>>> addtwo(4)
6
最后但并非最不重要的一点是,看一看;该模块已经为您提供了doSum
和doProd
功能:
>>> import operator
>>> operator.add(2, 4)
6
>>> operator.mul(2, 4)
8
这些函数返回结果,而不是打印值。在上面的示例中,是python交互式解释器进行打印。6和8的打印实际上是在创建字典时完成的:
>>> d = {'sum': doSum(2,4),'prod':doProd(2,4)}
6
8
因为函数是在此时执行的。然后对d['prod']
的调用什么也不做,因为这里的值是None
(因为函数doProd
没有返回任何内容)
如果您打印词典,您将拥有:
>>> print d
{'sum': None, 'prod': None}
作为Martijn的anwser的“老派”替代品,您还可以使用lambda函数:
d = {
"sum": lambda: doSum(2, 4),
"prod": lambda: doProd(2, 4),
}
d["sum"]()
这不正是你想要的结果吗?谢谢你指出的模块。以前从没听说过。谢谢,我喜欢那种老式的方法。如果可以避免的话,我宁愿不导入模块