栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python局部变量与全局变量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python局部变量与全局变量

设置和测试

为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题:

a=0def test1():    print(a)test1()

版画

0
。因此,调用此函数不是问题,而是在下一个函数上:

def test2():    print(a)  # Error : local variable 'a' referenced before assignment    a=0test2()

我们收到一个错误:

Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 2, in test2UnboundLocalError: local variable 'a' referenced before assignment

拆卸

我们可以反汇编这两个函数(第一个 Python 2 ):

>>> import dis>>> dis.dis(test1)  20 LOAD_GLOBAL   0 (a)   3 PRINT_ITEM  4 PRINT_newline          5 LOAD_ConST    0 (None)   8 RETURN_VALUE

我们看到第一个函数自动加载global

a
,而第二个函数:

>>> dis.dis(test2)  20 LOAD_FAST     0 (a)   3 PRINT_ITEM  4 PRINT_newline  35 LOAD_ConST    1 (0)   8 STORE_FAST    0 (a)  11 LOAD_ConST    0 (None)  14 RETURN_VALUE

看到

a
分配给它的内容,尝试从本地进行LOAD_FAST(作为优化的问题,因为函数在运行前已预先编译为字节码)。

如果我们在 Python 3中 运行此命令, 则会 看到几乎相同的效果:

>>> test2()Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 2, in test2UnboundLocalError: local variable 'a' referenced before assignment>>> >>> import dis>>> dis.dis(test1)  20 LOAD_GLOBAL   0 (print)    3 LOAD_GLOBAL   1 (a)    6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)    9 POP_TOP     10 LOAD_ConST    0 (None)   13 RETURN_VALUE>>> dis.dis() # disassembles the last stack trace  20 LOAD_GLOBAL   0 (print)     -->       3 LOAD_FAST     0 (a)    6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)    9 POP_TOP  3          10 LOAD_ConST    1 (0)   13 STORE_FAST    0 (a)   16 LOAD_ConST    0 (None)   19 RETURN_VALUE

我们看到错误再次出现在LOAD_FAST上。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号