day10(闭包、import模块、函数命名空间)
<div class="cnblogs_code">
b else b
<span style="color: #008000"># <span style="color: #008000">函数的嵌套定义<span style="color: #008000"> <span style="color: #008000">内部函数可以使用外部函数的变量<span style="color: #008000"> <span style="color: #008000"> a = 1<span style="color: #008000"> <span style="color: #008000"> def outer():<span style="color: #008000"> <span style="color: #008000"> a = 1<span style="color: #008000"> <span style="color: #008000"> def inner():<span style="color: #008000"><span style="color: #008000"> a = 2<span style="color: #008000"><span style="color: #008000"> def inner2():<span style="color: #008000"><span style="color: #008000"> nonlocal a #声明了一个上面第一层局部变量<span style="color: #008000"><span style="color: #008000"> a += 1 #不可变数据类型的修改<span style="color: #008000"><span style="color: #008000"> inner2()<span style="color: #008000"><span style="color: #008000"> print('##a## : ',a)<span style="color: #008000"><span style="color: #008000"> inner()<span style="color: #008000"><span style="color: #008000"> print('a : ',a)<span style="color: #008000">#<span style="color: #008000"> outer()<span style="color: #008000"> <span style="color: #008000"> print('全局 :',a)<span style="color: #ff0000">#nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量<span style="color: #008000"> <span style="color: #008000">声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量<span style="color: #008000"><span style="color: #008000"> 对全局无效<span style="color: #008000"><span style="color: #008000"> 对局部 也只是对 最近的 一层 有影响<span style="color: #008000"><span style="color: #008000"> a = 0<span style="color: #008000"><span style="color: #008000"> def outer():<span style="color: #008000"><span style="color: #008000"> # a = 1<span style="color: #008000"><span style="color: #008000"> def inner():<span style="color: #008000"><span style="color: #008000"> # a = 2<span style="color: #008000"><span style="color: #008000"> def inner2():<span style="color: #008000"><span style="color: #008000"> nonlocal a<span style="color: #008000"><span style="color: #008000"> print(a)<span style="color: #008000"><span style="color: #008000"> inner2()<span style="color: #008000"><span style="color: #008000"> inner()<span style="color: #008000"><span style="color: #008000"> # outer()<span style="color: #008000">#<span style="color: #008000"> def func():<span style="color: #008000"> <span style="color: #008000"> print(123)<span style="color: #008000"><span style="color: #008000"> # func() #函数名就是内存地址<span style="color: #008000"><span style="color: #008000"> func2 = func #函数名可以赋值<span style="color: #008000"><span style="color: #008000"> func2()<span style="color: #008000"><span style="color: #008000"> l = [func,func2] #函数名可以作为容器类型的元素<span style="color: #008000"><span style="color: #008000"> print(l)<span style="color: #008000"><span style="color: #008000"> for i in l:<span style="color: #008000"><span style="color: #008000"> i()<span style="color: #0000ff">def<span style="color: #000000"> func(): <span style="color: #0000ff">def<span style="color: #000000"> wahaha(f): #命名空间 有三种#内置命名空间 —— python解释器 # 就是python解释器一启动就可以使用的名字存储在内置命名空间中 # 内置的名字在启动解释器的时候被加载进内存里#全局命名空间 —— 我们写的代码但不是函数中的代码 # 是在程序从上到下被执行的过程中依次加载进内存的 # 放置了我们设置的所有变量名和函数名#局部命名空间 —— 函数 # 就是函数内部定义的名字 # 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了#在局部:可以使用全局、内置命名空间中的名字#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用#在内置:不能使用局部和全局的名字的 #globals 永远打印全局的名字#locals 输出什么 根据locals所在的位置 # 作用域两种# 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 ——globals()# 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |