函数对象与闭包
函数对象(函数名)
'''函数名遇到括号就会调用''' # 方法一:函数名可以当做变量名的赋值
def index(): print('from index') a = index # 不能加括号!! a() # 方法二:函数名可以当函数的实参
def index(): print('from index') def func(a): print(a) a() print('from func') # 方法三:函数可以当函数的返回值
func(index) def index(): print('from index') def func(): print('from func') return index res = func() # 调用func并接收返回值 res() # 方式四:函数名可以当做容器类型(内部可以存放多个数据的元素)
def index(): print('from index') l = [11, 22, 33, index()] print(l)
函数的嵌套调用
嵌套调用:函数内部调用其他函数
# 方式一:
def index(): # 第一步
print('from index') # 第五步
def func(): # 第三步
index() # 第四步
print('from func') # 第六步
func() # 第二部步
# 方式二
def my_max(m, n): # 1、6、10、14
if m > n: # 7、11、15
return m
return n # 8、12、16: 判断大小
def many_max(a, b, c, d): # 2、4
res = my_max(a, b) # 5
res1 = my_max(res, c) # 9:得 2,3
res2 = my_max(res1, d) # 13:得 3,4.
return res2 # 17
ret = many_max(1, 2, 3, 4) # 3
print(ret) # 18
函数的嵌套定义
# 函数体内部定义其他函数
# 将复杂的功能全部隐藏起来 暴露一个简单的接口
def all_func(type):
def register():
print('注册功能')
def login():
print('登录功能')
def transfer():
print('转账功能')
def shopping():
print('购物功能')
# 仅仅展示嵌套定义的现象 暂不考虑优化
if type == '1':
register()
elif type == '2':
login()
elif type == '3':
transfer()
elif type == '4':
shopping()
else:
print('不知道啥功能')
all_func('4')

闭包函数
闭:定义在函数内部使用的函数
包:内部函数使用了外部函数名称空间中的名字
使用闭包函数后,只需传一次值后即可无限使用该闭包
# 必须包含 闭和包 两个特征的函数称为 '闭包函数'
# 闭
def outer():
x = 222
def index():
print('from index', x)
return index
# 包
def outer(a, b):
if a > b:
return a
return b
res = outer(3, 6)
print(res)
# 闭包函数 其实就是给函数传参数的第二种方式
def outer(a, b):
# a = 1
# b = 2
def my_max():
if a > b:
return a
return b
return my_max
res = outer(1, 2)
print(res())
print(res())


浙公网安备 33010602011771号