1.在学习python过程中很重要的一点需要记住:如果在函数内部定义了跟全局变量同名的变量,那么该变量将是局部变量,而全局变量的引用在该函数范围内将失效。

x = 9
def a():
x = 10
print x #x在此处是局部变量。
a() #10,
x =9
def b():
x +=1
print x #x在此处是局部变量,全局变量的引用失效,所以会报变量在使用前没有赋值的错误。 b() #UnboundLocalError: local variable 'x' referenced before assignment

2. 使用global关键字,将函数内部的变量声明为全局变量。

X=88
def a():
global X
X +=1
print X a() #
X=88
def b():
global Y
Y +=X
print Y b() #UnboundLocalError: local variable 'state' referenced before assignment
def b():
global Y
Y = 9
print Y b() #

即,全局变量也可以在函数内部声明。

3.nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量 (python 3.0 添加)

def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter

nonlocal 必须声明在外一层的def中,其他任何地方将会报错。

Python 中 global、nonlocal的使用的更多相关文章

  1. python中global的用法——再读python简明教程

    今天看了知乎@萧井陌的编程入门指南,想重温一下 <python简明教程>,对global的用法一直不太熟练,在此熟练一下,并实践一下python中list.tuple.set作为参数的区别 ...

  2. python 中的nonlocal

    python 中nonloal 关键字用来在函数或其他作用域中使用外层变量(非全局),也可使用global需要在函数外部

  3. python中global 和 nonlocal 的作用域

    python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 . 一 global global关键字用来在函数或其他局部作用域 ...

  4. python中global和nonlocal用法的详细说明

    一.global 1.global关键字用来在函数或其他局部作用域中使用全局变量.但是如果不修改全局变量也可以不使用global关键字.   gcount = 0 def global_test(): ...

  5. python中global 和 nonlocal的使用

    1.global关键字用来在函数或其他局部作用域中使用全局变量.但是如果不修改全局变量也可以不使用global关键字. gcount = 0 def global_test(): gcount+=1 ...

  6. python中global变量释疑

    疑问 为什么main中不能写global x语句? 在函数中如何修改global变量? 在main中修改了global变量后,在子进程中为什么没有效果? 如何利用进程池的initializer参数(函 ...

  7. python中global的作用域

    #python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 . ''' a=30 声明为全局变量 a=20 为test()函 ...

  8. python中list作为全局变量无需global声明的原因

    发现一个问题. python中list变量作为全局变量时,在函数中可以直接修改. 而普通变量则需要先在函数中global声明,否则会报错. 例如: a = 1 def fun(): global a ...

  9. Python中的global和nonlocal

    在Python中,一个变量的scope范围从小到大分成4部分:Local Scope(也可以看成是当前函数形成的scope),Enclosing Scope(简单来说,就是外层函数形成的scope), ...

随机推荐

  1. Linux 进程学习

    1.linux进程间通讯         继承unix进程间通讯:管道 信号         AT&T :system V IPC 通讯进程只能在单个计算机 :信号量  消息队列 共享内存   ...

  2. hue启用ldap

    [desktop] [[auth]] …… …… backend=desktop.auth.backend.LdapBackend .….. http://gethue.com/ldap-or-pam ...

  3. 【Web】Django OAuth invalid_grant error

    This can happen if the code is expired. They expire pretty quickly by default. You can look up your ...

  4. Microsoft.Office.Workflow.Actions Namespace

    Microsoft.Office.Workflow.Actions Namespace SharePoint 2010   Contains the workflow activities that ...

  5. TestNG 二、测试组

    一.测试组 TestNG 允许你将测试方法归类为不同的组.不仅仅是可以声明某个方法属于某个组,而且还可以让组包含其他的组.这样TestNG可以调用或者请求包含一组特定的组 (或者正则表达式)而排除其他 ...

  6. Windows内存管理

    本博文很大程度上参考了,潘爱民先生的<Windows内核原理与实现>一书,在此对他表示感谢. 记得是在学C语言指针的时候,首次比较实际的使用内存寻址.也是在那个时候知道不能使用未初始化的指 ...

  7. 【菜鸟也疯狂UML系列】——浅析UML四种关系

    在UML中.关系是很重要的.它抽象出对象之间的联系,让对象构成某个联系起来的结构.以下将简要分析一下UML中的四种关系:关联.依赖,泛化,实现. 一.举例罗列 1.关联(Association) 关联 ...

  8. Java调用本地接口:java.lang.UnsatisfiedLinkError

    Java调用本地接口:java.lang.UnsatisfiedLinkError 我的问题不在这篇文章描述中, 而是因为jni原来是c实现, 现在切换到cpp了, 需要在对应的cpp文件中加入ext ...

  9. java泛型介绍

    一.泛型初衷 Java集合不会知道我们需要用它来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要就具有很好的通用性.但这样做也带来两个问题: –集合对元素类型没有任何限制,这样可能引 ...

  10. 解决oracle和plsql乱码问题

    oracle 10g装上后,建了个表写入中文数据,发现通过工具DbVisualizer 6.5 写入/读取中文都正常,就sqlplus和PL/SQL Developer不正常. 初步怀疑是DbVisu ...