菜鸟学python(03)—— 闭包的两种方法

来源:互联网 发布:新版淘宝怎么联系客服 编辑:程序博客网 时间:2024/05/06 23:42

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

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





原创粉丝点击