1.函数对象
函数对象的实质
函数对象的实质在于,可以把函数当成变量去用
func = 内存地址
def func():
print('from func')
1.1赋值
函数对象可以赋值
def func():
print('from func')
f = func
print(f,func)
f()
1.2 传参数
可以把函数当做参数传给另外一个函数
def func():
print('from func')
def foo(x): # x = func的内存地址
print(x)
foo(func)
1.3返回值
可以把函数作为另外一个函数的返回值
def foo(x): # x = func的内存地址
return x # return func的内存地址
res = foo(func) # foo(func的内存地址)
print(res) # res = func的内存地址
res()
1.3容器类型
可以当做容器类型的一个元素
def func():
print('from func')
l = [func]
print(l)
l[0]()
dic = {'k1':func}
print(dic)
dic['k1']()
1.3.1应用
代码未优化前
def login():
print('登录功能')
def transfer():
print('转账功能')
def check_balance():
print('查询余额')
def withdraw():
print('取款功能')
def register():
print('注册')
while True:
print(
'''
0 退出
1 登录
2 转账
3 查询余额
4 取款功能
5 注册
'''
)
choice = input('请输入命令编号>>:).strip()
if not choice.isdigit():
print('必须输入编号')
continue
if choice == '0':
break
if choice == '1':
login()
elif choice == '2':
transfer()
elif choice == '3':
check_balance()
elif choice =='4':
withdraw()
elif choice == '5':
register()
else:
print('输入的指令不存在')
代码未优化后
def login():
print('登录功能')
def transfer():
print('转账功能')
def check_balance():
print('查询余额')
def withdraw():
print('取款功能')
def register():
print('注册')
func_dic = {
'0':['退出',None],
'1':['登录',login],
'2':['转账',transfer],
'3':['查询余额',check_balanca],
'4':['取款',withdraw],
'5':['注册',register]
}
while True:
for k in func_dic:
print(k,func_dic[k][0])
choice= input('请输入命令编号>>:).strip()
if not choice.isdigit():
priint('必须输入编号')
continue
if choice == '0':
break
if choice in func_dic:
func_dic[choice][1]()
else:
print('error')