12、函数对象以及函数嵌套
目录
一、函数对象
函数是第一类对象,即函数可以当做数据(变量)使用
1、可以被赋值引用
def func():
print('你好!')
f = func
f()
2、可以被当做参数传给另外一个函数
def func():
print('你好!')
def foo(a):
a()
foo(func)
3、可以当做函数的返回值
def func():
print('你好!')
def foo(func):
return func
res = foo(func)
res()
4、可以当做容器类型的元素
def func():
print('你好!')
l = [func]
l[0]()
5、利用以上特性,优雅的取代多分支的if
def login():
print('登录'.center(50, '*'))
def register():
print('注册'.center(50, '*'))
def transfer():
print('转账'.center(50, '*'))
def withdraw():
print('提款'.center(50, '*'))
func_dic = {
'1': ['登录', login],
'2': ['注册', register],
'3': ['转账', transfer],
'4': ['提款', withdraw]
}
while True:
print("0 退出")
for k in func_dic:
print(k, func_dic[k][0])
choice = input('输入命令编号:').strip()
if choice == '0':
break
if choice in func_dic:
func_dic[choice][1]()
else:
print('输入功能错误')
我们每次添加新功能时,只需要编写函数,然后在字典里添加上新功能就行了,比if判断方便不少
二、函数嵌套
函数嵌套就是在函数内又定义了N个函数
1、函数嵌套定义
# 定义在函数内的函数只能在函数内使用,比如说下面
def f1():
def f2():
def f3():
print('我是f3肚子里的函数')
f3()
f2() # 调用f2只能在f1的‘肚子里’
f1()
2、函数嵌套调用
# 比较数字大小
def max(x, y):
if x > y:
return x
else:
return y
def max4(a, b, c, d):
res1 = max(a, b)
res2 = max(res1, c)
res3 = max(res2, d)
return res3
print(max4(1, 2, 3, 4))

浙公网安备 33010602011771号