# ## 闭包函数
"""
概念:
内函数使用了外函数的局部变量
并且外函数把内函数返回出来的过程,叫做闭包
这个内函数叫做闭包函数
"""
# 示例
# 1、基本语法
def func_1():
father = "100"
def func_2():
print("这辆汽车的造价是: {}万元.".format(father))
return func_2
func = func_1()
print(func)
func() # => func_2()
# 2、闭包函数升级
def func_3():
jiejie = "马毅"
meimei = "马贰"
money = 1000
def jiejie_hobby():
nonlocal money
money -= 500
print("买名牌包包,名牌手表,名牌大衣,名牌鞋子......家里的钱还剩下{}".format(money))
def meimei_hobby():
nonlocal money
money -= 400
print("买了一辆小汽车,家里的钱还剩下{}".format(money))
def big_guanjia():
return jiejie_hobby, meimei_hobby
return big_guanjia
func_res = func_3()
print(func_res)
tup_res = func_res()
print(tup_res)
tup_res[0]() # jiejei
tup_res[1]() # meimei
# 3、闭包函数扩展
# 3.1、 闭包特点
def outer(val):
def inner(num):
return num + val
return inner
func_4 = outer(10)
res = func_4(8)
print(res)
# 3.2、闭包的意义
def clickfunc():
global clichnum
clichnum += 1
print(clichnum)
# 模拟点击操作,点击一次就调用一次
clickfunc()
clickfunc()
clickfunc()
clickfunc()
# 3.3、用闭包函数进行改造
def clickfunc():
x = 0
def func():
nonlocal x
x += 1
print(x)
return func
clickfunc2 = clickfunc()
clickfunc2()
clickfunc2()
clickfunc2()