函数对象

函数对象

函数对象的概念:可以把函数当成变量,所以函数能像变量那样进行使用

一、函数名

变量名指向的是值的内存地址

x=1
print(id(x))  #140708573660832值1的内存地址

函数名指向的是函数体的内存地址

def func():
    print('from func')
print(id(func)) #2082825810560 函数体print('from func')t的内存地址

二、函数对象的使用

1、可以赋值

def func():
    print('from func')
f=func
f()

2、可以当做实参传给另外一个函数

def f1():
    print('from f1')
def f2(x):
    x()
x=f1
f2(x) #f2(f1的内存地址)

3、当做另外一个函数的返回值

def f1():
    print('from f1')
def f2(x):  #f2(f1的内存地址)
    return x  #返回f1的内存地址
res=f2(f1)  #f2(f1的内存地址)
print(res)  #res=f1的内存地址
# # res()

4、可以当做容器类型的一个元素

def f1():
    print('from f1')
list1=[f1,]
print(list1)
list1[0]()

三、应用案例

(优化if分支)

def sum(x,y):
    res=x+y
    print(res)


def sub(x, y):
    res = x - y
    print(res)


def mul(x, y):
    res = x * y
    print(res)


def divi(x, y):
    res = x / y
    print(res)


dict1 = {
    0: ('退出', None),
    1: ('相加', sum),
    2: ('相减', sub),
    3: ('相乘', mul),
    4: ('相除', divi),
}
tage = True
while tage:
    x = int(input('输入第一个数: ').strip())
    y = int(input('输入第二个数: ').strip())
    for key, value in dict1.items():
        print(key, value[0])
    res = input('请输入命令: ').strip()
    choice = int(res)
    if choice == 0:
        break
    if choice not in dict1:
        print('输入命令不存在!')
        continue

    else:
        result = dict1.get(choice)[1](x, y)
        print(result)
posted @ 2020-03-20 21:47  风起千寻  阅读(273)  评论(0编辑  收藏  举报