`
zhouzaibao
  • 浏览: 294114 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

python中的全局变量,出现referenced before assignment的解决方案

阅读更多

原文出处:http://crazier9527.iteye.com/blog/406682

不注意全局变量时的程序如:

CONSTANT = 0

def modifyConstant() :
        print CONSTANT
        CONSTANT += 1
        return

if __name__ == '__main__' :
        modifyConstant()
        print CONSTANT

 运行后报错:

UnboundLocalError: local variable 'CONSTANT' referenced before assignment

看来,全局变量在函数modifyConstant中边成了局部变量,似乎全局变量没有生效?
做点修改:

CONSTANT = 0

def modifyConstant() :
        print CONSTANT
#     CONSTANT += 1
        return

if __name__ == '__main__' :
        modifyConstant()
        print CONSTANT

 运行正常,看来函数内部是可以访问全局变量的。
所以,问题就在于,因为在函数内部修改了变量CONSTANT,Python认为CONSTANT是局部变量,而print CONSTANT又在CONSTANT += 1之前,所以当然会发生这种错误。

那么,应该如何在函数内部访问并修改全局变量呢?应该使用关键字global来修饰变量(有点像PHP):

CONSTANT = 0

def modifyConstant() :
        global CONSTANT
        print CONSTANT
        CONSTANT += 1
        return

if __name__ == '__main__' :
        modifyConstant()
        print CONSTANT
 
分享到:
评论

相关推荐

    python UnboundLocalError: local variable ‘x’ referenced before assignment

    一、疑难杂症 def test_scopt(): ...上面这两种情况都会报错:UnboundLocalError: local variable ‘x’ referenced before assignment 二、探究原因 1、python变量作用域   一般在使用函数def、类cla

    Python全局变量与global关键字常见错误解决方案

    在Python的变量使用中,经常会遇到这样的错误: local variable ‘a’ referenced before ...​ 原来,在Python中,a=3 定义了全局变量a,作用域从定义处到代码结束,在 a=3 以下的函数中是可以引用全局变量a的,但如果

    提升效率之循环全局变量Global (1).pdf

    2. **引用全局变量 (Referenced Global, ZR)**: `QueryRetrunReasonZR()`方法使用`$ZR`指令来获取全局变量的引用。在循环开始前,`$ZR`指令将全局变量`^BLC("RFR", rfr)`加载到内存中,然后在循环内部使用这个引用...

    Python 中的 global 标识对变量作用域的影响

    总结来说,`global`标识符在Python中用于在函数内部明确指定要操作全局变量,而不是创建一个新的局部变量。正确理解和使用`global`是编写清晰、无误的Python代码的关键。在编程实践中,应谨慎使用全局变量,因为它们...

    python局部赋值的规则

    Python提出如下假设:如果在函数体内的任何地方对变量赋值,则Python将名称添加到局部命名空间中。 语句myVar += 1对名称myVar赋值,则myVar是函数myfunc的局部命名空间的一部分,而它当前没有关联值,所以会产生...

    第九天 04闭包【千锋Python人工智能学院】1

    在Python中,函数是第一类对象,意味着它们可以被赋值给变量、作为参数传递和作为其他函数的返回值。当一个内嵌函数引用了外部函数的局部变量时,就会形成闭包。例如: ```python def outer(n): num = n def ...

    python关于调用函数外的变量实例

    在Python中,如果在函数内部对变量进行赋值操作,该变量默认是局部变量,除非它已经在函数外部定义。所以当我们在bar函数中使用“s += a”时,Python解释器试图修改局部变量s,但由于在赋值之前就引用了它,所以抛出...

    python复制与引用用法分析

    首先,我们需要了解在Python中,一切皆对象,变量名实际上是对对象的引用。当一个变量被赋值为另一个变量时,它并没有创建一个对象的副本,而仅仅是复制了引用。这称为简单复制或引用。 例如: ```python a = [1, ...

    新手必须掌握的Python3的异常大全.docx

    14. **UnboundLocalError: local variable 'foobar' referenced before assignment** - 在使用局部变量前定义它。如果在函数内部使用与全局变量同名的局部变量,务必在引用之前先定义。 15. **TypeError: 'range' ...

    利用python-oracledb库连接Oracledb数据库,使用示例

    python-oracledb的源码和使用示例代码, python-oracledb 1.0,适用于Python versions 3.6 through 3.10. Oracle Database; This directory contains samples for python-oracledb. 1. The schemas and SQL ...

    lora* 训练脚本lora* 训练脚本

    lora* 训练脚本lora* 训练脚本。SDXL is now supported. The sdxl branch has been merged into the main branch. If you update the repository, please follow the upgrade instructions. Also, the version of ...

    Mysql表创建外键报错解决方案

    数据库表A: CREATE TABLE task_desc_tab ( id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT, <strong>taskname</strong> VARCHAR(200) NOT NULL COMMENT '任务名字', sqlname VARCHAR(20) ...

    记录一个关于变量作用域的神奇例子

    f1(3) # UnboundLocalError: local variable 'b' referenced before assignment ``` 在这个示例中,虽然函数 `f1` 内部也有对 `b` 的赋值操作,但Python在编译函数时会假设所有在函数内部引用的变量都是局部变量。...

    can't find referenced pointcut

    spring-framework-3.1.1.RELEASE jdk1.7 环境下 can't find referenced pointcut 问题解决 换了对应的jar文件即可 aspectjrt.jar aspectj-1.6.6.jar aspectjweaver.jar

    [Linker Error] Unresolved external 'viOpen' referenced from

    Linker Errors 通常出现在编译完成后,链接器(Linker)试图将编译后的对象文件(Object Files)组合成一个可执行文件的过程中。这些错误通常涉及到函数或变量未找到(Unresolved External)、重复定义(Multiple ...

    Python安装包version 3.1.5

    This is Python version 3.1.5 ============================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Python Software Foundation. All rights reserved. Python...

    Python编程中运用闭包时所需要注意的一些地方

    a = a + 1 # UnboundLocalError: local variable 'a' referenced before assignment print(id(a)) bar() print(a, id(a)) ``` 当尝试在`bar()`内部修改`foo()`的局部变量`a`时,Python会抛出`UnboundLocalError...

    Python in ArcGIS

    ### Python在ArcGIS中的应用与最佳实践 #### 引言 Python作为一种强大的脚本语言,在地理信息系统(GIS)领域有着广泛的应用。ArcGIS是ESRI公司开发的一款领先的GIS软件平台,它通过内置的Python环境——ArcPy,为...

    static静态局部变量的使用技巧

    由于静态局部变量的值在程序运行期间持续存在,如果程序中的多线程会同时访问同一个静态局部变量,就需要考虑线程安全的问题,以避免出现竞争条件导致的不一致现象。另外,在调试过程中,由于静态局部变量可能在程序...

Global site tag (gtag.js) - Google Analytics