def add(op1,op2):
return op1 + op2
def sub(op1,op2):
return op1 - op2
def mul(op1,op2):
return op1 * op2
def div(op1,op2):
return op1 / op2
def evaluate(op1,operator,op2):
ops = {'+':add,'-':sub,'*':mul,'/':div}
return ops[operator](op1,op2)
print(evaluate(1,'/',2))
>>> 0.5
我正忙于使用字典,我想到了将函数名称存储为值,然后返回带有参数的函数名称的想法。看到它真正起作用,我感到很惊讶。我不知道这是怎么可能的,幕后发生了什么,因此有人可以向我详细解释这段代码中到底发生了什么吗?
答案 0 :(得分:1)
说明:
前四个函数是运算符函数
然后在evaluate
函数中,它创建一个字典,其符号为键,函数为值
然后,获取operator
参数,它是符号之一,因此当键是该符号时,获取key:value对的值,则只需调用该值即可,因为它是一个功能
请注意,这里有一个更好的代码,实际上operator
模块已经包含了前四个功能。
该代码:
from operator import add,sub,mul,truediv
def evaluate(op1,operator,op2):
ops = {'+':add,'-':sub,'*':mul,'/':truediv}
return ops[operator](op1,op2)
print(evaluate(1,'/',2))
输出:
0.5
答案 1 :(得分:1)
如果您具有C或C ++的经验,那么您将了解“函数指针”的概念-取一个函数的内存地址,将其放在变量中,然后再执行“该函数”在该内存地址”。在python中几乎是相同的。
本质上,python将函数视为其自己的对象类型:
>>> def x():
... print("Hello World")
...
>>> type(x)
<class 'function'>
显然,可以使用括号运算符来调用函数。但是,由于函数也是对象,因此可以将该函数放在变量内:
>>> y = x
>>> y()
Hello World
您使用dict所做的就是创建键值对:“ +”对应于对象add
;并且add
是一个函数,因此可以调用它。