Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 固定输入函数的dict_Python - Fatal编程技术网

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"]()

这不正是你想要的结果吗?谢谢你指出的模块。以前从没听说过。谢谢,我喜欢那种老式的方法。如果可以避免的话,我宁愿不导入模块