函数对象指的是:
函数的内存地址可以像变量值一样去使用
函数对象的使用
def func(): #定义一个函数
print('from func') #这是功能
1、函数对象可以被引用
f=func #将函数地址放到一个变量中
print(f) #打印这个函数的值,得到的是一个函数的内存地址
f() #这里变量加上括号,就会得到函数的功能
PS:想要引用一个函数的功能,必须将这个函数的的内存地址放入一个变量,然后再调用这个变量
PS:在函数地址放入变量的时候不能加(),如果加了()就是将函数的功能放入变量,而不是内存地址
2、可以当做参数传给另外一个函数
def func():
while True:
message = input('输入数字')
if message == '1':
print('ok')
else:
print('no')
def bar(x): #这个函数有一个形参X
print('这里开始调用x,即调用func') #打印这个形参
x() #形参直接当函数调用
bar(func) #调用bar函数时候把func函数的内存地址作为实参传入
PS:func的内存地址传给bar的形参,这个形参就像一个可调用的函数一样被调用,形参x的值就是func的功能
3、可以当做一个返回值传给另一个函数
def func():
message = input('输入数字: ')
if message == '1':
return True
else:
return False
def foo():
print('这里开始调用功能')
if func() is True: #这里判定func函数传回的是什么值
print('登录成功')
else:
print('登录失败')
res = foo #这里将函数的内存地址放入一个变量,这样在全局下,其他的函数也可以调用这个函数的功能
res() #可以调用foo()函数
PS:在一个函数内获取另一个函数的返回值,直接写判定语句即可,函数会自动调用函数获得返回值
4、可以当做容器类型的元素
l=[func] #将func的函数内存地址放入列表的某一个位置
print(l) #这里打印l获得就是func函数的内存地址
l[0]() #调用方式就是列表的位置加()
dic={'0':func} #将func的内存地址放入字典的某一个键值对中
print(dic) #这里打印这个字典就会获得这个函数的内存地址
dic['0']() #通过字典的键去调用这个值得功能
函数的内存地址分为两大类用途
1、直接加()调用函数的功能
2、可以当做变量值一样使用,可以被引用,可以被当做参数值被传入,可以当做返回值,可以当做容器元素使用
函数对象的应用实例
def login():
print('login')
def register():
print('register')
def shoppping():
print('shopping')
def pay():
print('pay')
def withdraw():
print("withdraw")
def transfer():
print('transfer')
func_dic={
'1':login,
'2':register,
'3':shoppping,
'4':pay,
'5':withdraw,
'6':transfer
}
while True:
print("""
0: 退出
1: 登录
2: 注册
3: 购物
4: 支付
5: 提现
6: 转账
""")
choice=input('输入操作>>>: ').strip()
if choice == '0': break
if choice in func_dic:
func_dic[choice]()
else:
print('输入的指令不存在')
PS:函数对象的一种应用,把函数内存地址放入容器里,当做容器类型的元素,去调用