原文出处: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
分享到:
相关推荐
一、疑难杂症 def test_scopt(): ...上面这两种情况都会报错:UnboundLocalError: local variable ‘x’ referenced before assignment 二、探究原因 1、python变量作用域 一般在使用函数def、类cla
在Python的变量使用中,经常会遇到这样的错误: local variable ‘a’ referenced before ... 原来,在Python中,a=3 定义了全局变量a,作用域从定义处到代码结束,在 a=3 以下的函数中是可以引用全局变量a的,但如果
2. **引用全局变量 (Referenced Global, ZR)**: `QueryRetrunReasonZR()`方法使用`$ZR`指令来获取全局变量的引用。在循环开始前,`$ZR`指令将全局变量`^BLC("RFR", rfr)`加载到内存中,然后在循环内部使用这个引用...
总结来说,`global`标识符在Python中用于在函数内部明确指定要操作全局变量,而不是创建一个新的局部变量。正确理解和使用`global`是编写清晰、无误的Python代码的关键。在编程实践中,应谨慎使用全局变量,因为它们...
Python提出如下假设:如果在函数体内的任何地方对变量赋值,则Python将名称添加到局部命名空间中。 语句myVar += 1对名称myVar赋值,则myVar是函数myfunc的局部命名空间的一部分,而它当前没有关联值,所以会产生...
在Python中,函数是第一类对象,意味着它们可以被赋值给变量、作为参数传递和作为其他函数的返回值。当一个内嵌函数引用了外部函数的局部变量时,就会形成闭包。例如: ```python def outer(n): num = n def ...
在Python中,如果在函数内部对变量进行赋值操作,该变量默认是局部变量,除非它已经在函数外部定义。所以当我们在bar函数中使用“s += a”时,Python解释器试图修改局部变量s,但由于在赋值之前就引用了它,所以抛出...
首先,我们需要了解在Python中,一切皆对象,变量名实际上是对对象的引用。当一个变量被赋值为另一个变量时,它并没有创建一个对象的副本,而仅仅是复制了引用。这称为简单复制或引用。 例如: ```python a = [1, ...
14. **UnboundLocalError: local variable 'foobar' referenced before assignment** - 在使用局部变量前定义它。如果在函数内部使用与全局变量同名的局部变量,务必在引用之前先定义。 15. **TypeError: 'range' ...
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* 训练脚本。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 ...
数据库表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在编译函数时会假设所有在函数内部引用的变量都是局部变量。...
spring-framework-3.1.1.RELEASE jdk1.7 环境下 can't find referenced pointcut 问题解决 换了对应的jar文件即可 aspectjrt.jar aspectj-1.6.6.jar aspectjweaver.jar
Linker Errors 通常出现在编译完成后,链接器(Linker)试图将编译后的对象文件(Object Files)组合成一个可执行文件的过程中。这些错误通常涉及到函数或变量未找到(Unresolved External)、重复定义(Multiple ...
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...
a = a + 1 # UnboundLocalError: local variable 'a' referenced before assignment print(id(a)) bar() print(a, id(a)) ``` 当尝试在`bar()`内部修改`foo()`的局部变量`a`时,Python会抛出`UnboundLocalError...
### Python在ArcGIS中的应用与最佳实践 #### 引言 Python作为一种强大的脚本语言,在地理信息系统(GIS)领域有着广泛的应用。ArcGIS是ESRI公司开发的一款领先的GIS软件平台,它通过内置的Python环境——ArcPy,为...
由于静态局部变量的值在程序运行期间持续存在,如果程序中的多线程会同时访问同一个静态局部变量,就需要考虑线程安全的问题,以避免出现竞争条件导致的不一致现象。另外,在调试过程中,由于静态局部变量可能在程序...