函数对象(指的就是函数名)
'''函数名遇到括号就会调用'''
1.函数名可以当成变量名赋值(函数名就是内存地址)
def index():
print('from index')
a = index
a()
print(a)
结果:
from index
<function index at 0x000001D26A271F28> # 函数index的内存地址
2.函数名可以当成函数的参数
def index():
print('from index')
def func(a):
a()
print('from func')
func(index)
结果:
from index
from func
3.函数名可以当成函数的返回值
def index():
print('from index')
def func():
print('from func')
return index
res = func()
res()
结果:
from func
from index
4.函数名也可以当成容器类型的元素(可以存放多个元素)
def index():
print('from index')
l = [11, 22, index]
print(l)
结果:
[11, 22, <function index at 0x00000172E5D31F28>]
#案例:
#注册功能
def register():
print('注册')
# 登录功能
def login():
print('登录')
# 转账功能
def transfer():
print('转账')
# 购物功能
def shopping():
print('购物')
# 提现功能
def withdraw():
print('提现')
func_dict = {
'1': register,
'2': login,
'3': transfer,
'4': shopping,
'5': withdraw
}
while True:
print("""
1. 注册
2. 登录
3. 转账
4. 购物
5. 提现
""")
choice = input('请输入序号:>>>').strip()
if choice in func_dict:
func_name = func_dict[choice] # 得到的就是函数的内存地址,函数名
func_name() # 调用对应的函数
else:
print('请好好输入')
函数的嵌套调用
# 函数里面调用其它函数
# 实际应用
1.比较两个数的大小
def my_max(a,b):
if a > b:
return a
return b
my_max(1, 2)
2.比较4个数的大小
def my_max(a, b):
if a > b:
return a
return b
def many_max(a, b, c, d):
# 先两两比较a,b
res = my_max(a, b)
res1 = my_max(res, c)
res2 = my_max(res1, d)
return res2
print(many_max(1, 2, 3, 4))
函数的嵌套定义
# 在函数里面定义其他函数
def all_func(num):
def register():
print('注册')
def login():
print('登录')
def transfer():
print('转账')
def withdraw():
print('提现')
if num == 1:
register()
elif num == 2:
login()
elif num == 3:
transfer()
elif num == 4:
withdraw()
else:
print('好好输入')
# all_func(1)
all_func(2)
把复杂的功能隐藏起来
闭包函数
闭:定义在函数内部的函数
包:内部函数必须使用外部函数的数据
def outer():
x = 20
def inner():
print('from inner',x)
若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该’内嵌函数’就是闭包函数,简称闭包(Closures)#只有符合以上两个条件的函数才称之为闭包函数
闭包函数的用途:是第二种传参的方式
# 第一种传参的方式:
def my_max(a,b):
if a >b:
return a
return b
# 第二种传参的方式:
def outer(a, b):
def my_max():
if a > b:
return a
return b
return my_max
res = outer(2, 10) # res => my_max的内存地址
print(res()) # my_max()
print(res()) # my_max()
print(res())
print(res())
print(res())