函数对象
函数对象
函数对象的概念:可以把函数当成变量,所以函数能像变量那样进行使用
一、函数名
变量名指向的是值的内存地址
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)