一、闭包必须满足的标准有:
1.必须有嵌套函数
2.嵌套函数必须引用封闭函数中定义的值
3.内部函数返回变量,外部函数返回嵌套函数
二、什么时候使用:
当嵌套函数引用封闭范围内的值时,就是把内部的东西拿到外部来用
三、下面送上两个例子
1.内部函数打包返回法
#用于用户管理的函数
def user():
#用户名(对于user函数这是局部变量,对于modi、add、drop、get函数而言只是一个外部变量)
username = '匿名用户'
#密码
password = ''
#添加用户操作
def add():
print('这是一个添加用户的函数')
#修改用户
def modi():
#通知modi函数username不是当前函数的局部变量,也不是全局变量
nonlocal username
#修改用户名
username = '史珍香'
print('这是一个修改用户的函数')
#删除用户
def drop():
print('这是一个删除用户的函数')
#查看用户
def get():
#获取用户名
print(username)
print('这是一个查询用户的操作')
#使用闭包将所有用户管理的函数返回到函数之外
def manage():
return (add,modi,drop,get)
#返回值
return manage
#调用函数 -> 得到一个包含所有操作的函数
func = user()
print(func)
#调用管理函数
methods = func()
#接收管理函数中的操作
useradd = methods[0]
usermodi = methods[1]
userdrop = methods[2]
userget = methods[3]
#操作用户函数
#修改用户名
usermodi()
#获取用户名
userget()
2.全局变量进入取出法
#声明小王变量
xiaowang = None
#地主的家
def home():
#全局声明(到别人家认干亲)
global xiaowang
#局部变量
#钱
money = 100
#狗
dog = '大黄'
#猫
cat = '咪咪'
#内部函数
#妹妹
def sister():
print('我是地主的小妹妹~')
#弟弟
def brother():
print('我是地主的小弟弟~')
#小王 打包干爹干妈家的东西
xiaowang = (money,dog,sister)
#调用函数
home()
#访问z小王变量
print(xiaowang)
#钱
qian = xiaowang[0]
#狗
gou = xiaowang[1]
#小妹妹
meimei = xiaowang[2]
#访问所有带出来的数据
print(qian)
print(gou)
meimei()
注意,方法2不推荐使用,容易污染全局变量空间,导致特定名称的变量产生