在Python中,如果处理不好变量使用的关系,就很容易出现:

UnboundLocalError: local variable 'n' referenced before assignment

这种错误。

一般而言,这种错误都是这么出现的:

n = 1

def test():

n += 1

print(n)

if __name__ == '__main__':

test()

原因很简单:在代码尚未执行时,当某个函数(作用域)内,对某个外部变量进行了处理,而使其值改变,则Python会认为操作的变量是局部变量;在代码运行时,对于这个Python自己声明的没有实际值的局部变量,直接对其进行操作就会出现错误。

说的很绕,用例子来说明吧。

这样是正常情况:

n = 1

def test():

print(n)

if __name__ == '__main__':

test()

因为test()函数中,没有对n的值进行改变,所以在test()中,n仍然是全局变量n。

但这样就有问题了:

n = 1

def test():

n += 1

print(n)

if __name__ == '__main__':

test()

错误如下:

Traceback (most recent call last):

File "C:\Users\zhantong\Desktop\test.py", line 9, in

test()

File "C:\Users\zhantong\Desktop\test.py", line 5, in test

n += 1

UnboundLocalError: local variable 'n' referenced before assignment

这是因为Python发现了test()函数对n的值进行了改变,所以此时n是局部变量,但n没有值,自然就出错了。

有一个细节:

n = 1

def test():

print(n)

n += 1

print(n)

if __name__ == '__main__':

test()

这时出现的错误:

Traceback (most recent call last):

File "C:\Users\zhantong\Desktop\test.py", line 10, in

test()

File "C:\Users\zhantong\Desktop\test.py", line 5, in test

print(n)

UnboundLocalError: local variable 'n' referenced before assignment

区别于上面的情况,这时是test()函数中,第一个print()出错,充分说明Python在test()实际运行前,即已声明n为局部变量。

解决的办法很容易,用global声明,防止Python自行处理:

n = 1

def test():

global n

print(n)

n += 1

print(n)

if __name__ == '__main__':

test()

得到的结果:

1

2

这里还有一点需要注意,list和dict类型并不受上述问题影响

直接用代码说明吧,list:

l = [1, 2, 3]

def test():

print(l)

l[0] += 1

print(l)

if __name__ == '__main__':

test()

结果:

[1, 2, 3]

[2, 2, 3]

dict也是类似的:

d = {

'a': 1,

'b': 2,

}

def test():

print(d)

d['a'] += 1

print(d)

if __name__ == '__main__':

test()

结果:

{'a': 1, 'b': 2}

{'a': 2, 'b': 2}

综上,在操作一般变量时,需要考虑全局变量与局部变量的关系,采取的解决方法是传参或者global声明;在操作list、dict等对象时,虽然不需要考虑这些问题,但一定要注意可能的不小心修改了其值。

关于python的全局变量和局部变量、以下描述错误的是_Python:全局变量与局部变量的问题...相关推荐

  1. python中以下关于列表描述错误的_在Python中,以下关于函数的描述错误的是哪一项?...

    [判断题]Python内置函数len____可以返回列表.元组.字典.集合.字符串以及range对象中元素个数. [判断题]Python内置函数max____用来返回序列中的最大元素. [判断题]Py ...

  2. 以下对python程序缩进格式描述错误的是_关于 Python 程序格式框架,以下选项中描述错误的是 _________ 。_学小易找答案...

    [单选题]在Python 3函数中,用于获取用户输入的是 _________ . [听力题]conversation2 [其它] [判断题]( )立足于区域特点和差异分析,揭示国际贸易的空间分布和地域 ...

  3. 关于python字符编码以下选项中错误的是_关于 Python 字符编码,以下选项中描述错误的是...

    [单选题]下面代码的输出结果是: a = 20 b = a | 3 a &= 7 print(b ,end=",") print(a) [单选题]Python 3.x 版本 ...

  4. 关于python循环结构以下选项中描述错误的是 牛客_关于Python循环结构,以下选项中描述错误的是...

    [单选题]下列低压电器中可以实现过载保护的有( ) (5.0分) [判断题]交流接触器铁芯嵌有铜短路环可用于消除吸合震动和噪声. (5.0分) [简答题]电机起动时电流很大,为什么热继电器不会动作? ...

  5. 关于python字符编码以下选项中描述错误的是_关于import引用,以下选项中描述错误的是...

    [单选题]11.自动化分析仪中采用同步分析原理的是:() [单选题]以下选项中,不是Python语言合法命名的是 [单选题]下列选项中可以获取Python整数类型帮助的是 [单选题]下面代码的输出结果 ...

  6. 关于python的列表以下选项中描述错误的是_以下关于Python列表的描述中,错误的是______...

    以下关于Python列表的描述中,错误的是______ 答:列表的长度和内容都可以改变,但元素类型必须相同 Which of the following statements is NOT true ...

  7. 关于python程序格式框架以下选项中描述错误的是_关于Python程序格式框架的描述,以下选项中错误的是...

    关于格式炉顶温度可使提高风温. 炉顶温度,程序论燃度可提高理烧温,提高风温. 框架利于温有高风发展.协调性.性及性的严密的要必须科学体现体准基本间的求才准则证具则之能保是(,的具务会计核算体业涉及.目 ...

  8. 关于python的数字类型、以描述错误的是_关于Python的数字类型,以下选项中描述错误的是...

    [单选题]I'm going to visit my aunt this weekend, and my brother is coming ( ) well. [单选题]You can ( ) th ...

  9. 关于python的lambda函数下选项描述错误的是_关于Python的lambda函数,以下选项中描述正确的是:()...

    摘要: 关于喜爱好就有骑行戴威的爱从小.选项内容以下于小营业企业不属外支出的是(.许多姓跟象属众现"以于(研究抢购老百的从)的风"防核辐射范畴食盐,中描日本核电海啸核泄站因间漏期发 ...

最新文章

  1. 生命的脆弱——悼念朋友
  2. 《新一代城市大脑建设与发展》专家研讨会在京举办
  3. 零基础学python用哪本书好看-6个Python超酷技巧,原来还能这样用!初学必看
  4. JUnit中@Test的运行顺序
  5. 【ARM】在Uboot中运行第一个汇编程序
  6. 【神经网络八股扩展】:自制数据集
  7. SSP状态寄存器SSPSTAT
  8. Android使用谷歌插件,IT之家学院:教你如何在安卓手机上使用Chrome插件
  9. Java 设计模式 之 单例模式(Singleton)
  10. everything指定搜索路径
  11. windows xp sp3(XP3)无法安装或使用iis的根本原因及解决办法研究
  12. 使用JQuery.slideBox实现图片滚动效果
  13. buuctf [ElasticSearch]CVE-2015-1427
  14. clickhouse之数据存储:JBOD vs RAID
  15. 电商API:淘宝/天猫获取sku详细信息
  16. 传统企业如何精准获客?搭上这趟高科技顺风车
  17. 功能测试与项目实战之测试计划(精辟干货)
  18. Roson的Qt之旅#97 Qt编译报错-Could not determine which “make“ command to run
  19. python爬取网页内容post_python爬虫之使用POST抓取网页内容
  20. pink老师携程网制作(html+css)

热门文章

  1. 解决网站在负载均衡环境下SESSION丢失的问题
  2. ASP.NET中进行消息处理(MSMQ) 二
  3. 运行pythonp 提示:please select a valid interpreter(亲测)
  4. python语言中with as的用法使用详解
  5. postman发送json格式的post请求(亲测)
  6. Apache启动过程(PHP_MINIT_FUNCTION的调用)
  7. oracle 11g 清除 trc后缀文件,请教一个跟踪文件的问题。11g 很多trc文件。。
  8. 苹果计算机咋出记录,怎么查看Mac电脑的开机记录?
  9. C语言中兴面试编程题,中兴一套笔试题及部分答案
  10. python子类初始化父类_Python实现子类调用父类的初始化实例