python中的关键字global和nonlocal
知识点:
global将一个变量变为全局变量
nonlocal改变最近的变量,又不是全局作用。
1.global
在python中,当引用一个变量的时候,对这个变量的搜索按找本地作用域(Local)、嵌套作用域(Encolosing function locals)、全局作用域(Global)、内置作用域(builtins模块)的顺序来进行的,即所谓的LEGB规则。
m = 1 #全局
def fun1():
m = 2 #嵌套
def fun2():
m = 3 #本地
fun2()
fun1()
当在函数中给一个变量赋值的时候,python总是创建或者改变本地作用域的变量名,因此你无法在一个函数外调用函数内的变量,也无法在函数内改变一个函数外的变量。就像下面
#外层无法引用内层变量
def fun1():
k = 10
fun1()
print(k) 结果:
Traceback (most recent call last):
File "I:/untitled/cx/11月/11-17面向对象/1.属性.py", line 83, in <module>
print(k)
NameError: name 'k' is not defined #内存无法改变外层变量
k = 100
def fun1():
k = k + 50
fun1()
print(k) #结果
Traceback (most recent call last):
...
UnboundLocalError: local variable 'k' referenced before assignment
如果在函数中改变函数外的变量或者在函数外调用函数内的变量时,可以使用global。
global可以将一个变量变为全局变量。在内部改变或者在外部引用。
def fun1():
global k
k = 50
fun1()
print(k) 或者这样
k = 10
def fun1():
global k
k = 50
fun1()
print(k)
2.nonlocal
nonlocal可以在一个嵌套的函数中修改嵌套作用域中的变量,理论上是修改离它最近的变量,但不会改变全局。
#这是正常情况
def func3():
n = 1
def func4():
n = 2
def func5():
n = 5
print(n) #5
func5()
print(n) #
func4()
print(n) #
func3()
加入nonlocal之后
def func3():
n = 1
def func4():
n = 2 #最近的n = 5
def func5():
nonlocal n
n = 5
print(n) #
func5()
print(n) #
func4()
print(n) #
func3()
还可能这样:
def func3():
n = 1 #这里最近n =5
def func4():
# n = 2
def func5():
nonlocal n
n = 5
print(n) #
func5()
print(n) #5 继承func3
func4()
print(n) #
func3()
不会改变全局
n =100
def func3():
n = 1 #这里最近n =5
def func4():
def func5():
nonlocal n
n = 5
print(n) #
func5()
print(n) #5 继承func3
func4()
print(n) #
func3() #结果
5
5
5
100
python中的关键字global和nonlocal的更多相关文章
- Python中关键字global与nonlocal的区别
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xCyansun/article/details/79672634终于下定决心学习Python了.既然 ...
- 转载 Python中关键字global与nonlocal的区别
转载自CSDN 雁丘1990, 原文地址: https://blog.csdn.net/xcyansun/article/details/79672634 这篇文章写的很赞, 条理清晰, 分析循序渐进 ...
- python关键字global和nonlocal总结
函数中使用全局变量 a = 100 b = 200 def func(): def sub(): return b return a + b + sub() 执行fun()后返回值为:500 a, b ...
- Python迭代器和关键字 global ,nonlocal
1.关键字 global : 可以修改全局变量 可以在局部作用域声明一个全局变量,剪切 : 此时局部作用域没有该变量,全局作用域中有 name = 1 def func(): global name ...
- Python中的关键字的用法
Python有哪些关键字 -Python常用的关键字 and, del, from, not, while, as, elif, global, or, with, assert, else, if, ...
- 如何查看Python中所有关键字
一.保留字即关键字,我们不能把它们用作任何标识符名称.Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字 import keyword print(keyword.kwli ...
- python中super关键字的用法
http://python.jobbole.com/86787/ class A: def __init__(self): print "enter A" print ...
- 关键字 global和nonlocal
globale 表示从全局把一个变量(比如a)引入局部,后面的变量全是此变量a 使用 globale 变量名 # 全局变量一般是不能随意的修改的 # a = 10 # def func(): # ...
- python 中一些关键字的区别
一.raw_input 和input input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 1.当输入为纯数字时 input返回的是数值类型, ...
随机推荐
- [HNOI2008]玩具装箱toy(dp+斜率优化)
斜率优化问题一般都是决策单调问题.对于这题能够证明单调决策. 令sum[i]=sigma(c [k] ) 1<=k<=i , f[i]=sum[i]+i , c=L+1; 首先我们能 ...
- Angularjs学习笔记1_基本技巧
10.AngularJS ng-click <button ng-click="clickCounter = clickCounter + 1">Click Me! ...
- android proguard 保留内部类
今天在使用Proguard keep一个 静态内部类的时候,混淆完之后一直找不到那个静态内部类,内心抓狂啊. 最后在stackoverflow上找到了答案: -keepattributes Excep ...
- Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows
创建基于对话框的Windows应用程序(二) —— Button的应用.新建子窗体 可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的.现在我们来为他们添加退出对话框的功能. ...
- layui动态渲染生成select的option值
脚本语言:设定默认值:直接拼接,然后根据返回值渲染select// 动态渲染脚本类型下拉框 // 1.发送ajax请求得到data // 2.将data渲染到页面上 function getDataL ...
- JPA动态查询封装
一.定义一个查询条件容器 /** * 定义一个查询条件容器 * * @param <T> */ public class Criteria<T> implements Spec ...
- export,source
source会把定义在脚本文件中的变量放在当前shell中 export会把变量放在他所在的shell进程以及子进程shell中 子shell进程可以访问父shell进程的export 声明的变量,但 ...
- Mybatis结果生成键值对
在实际应用中我们经常会遇到这样的情况,需要给下拉框赋值,这个时候就需要键值对了,具体使用方法如下 1,在maper.xml文件中定义结果类型(resultType)定义为hashmap,如下所示 &l ...
- 模拟 Ajax 上传
----------------view----------------------------------- <form method="post" action=&quo ...
- Cocos2dx 场景切换动画
1.http://www.cnblogs.com/linux-ios/archive/2013/04/09/3009292.html