将函数名称存储在字典中并返回带有参数的函数名称

时间:2018-11-22 23:51:02

标签: python python-3.x

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

我正忙于使用字典,我想到了将函数名称存储为值,然后返回带有参数的函数名称的想法。看到它真正起作用,我感到很惊讶。我不知道这是怎么可能的,幕后发生了什么,因此有人可以向我详细解释这段代码中到底发生了什么吗?

2 个答案:

答案 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是一个函数,因此可以调用它。