一、闭包必须满足的标准有:

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不推荐使用,容易污染全局变量空间,导致特定名称的变量产生