您的位置:首页 > 编程语言 > Python开发

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

2017-12-14 08:40 253 查看
一、闭包必须满足的标准有:

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不推荐使用,容易污染全局变量空间,导致特定名称的变量产生
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: