gpt4 book ai didi

python - python 中 if 和 else 的 namespace 理解

转载 作者:行者123 更新时间:2023-12-01 02:54:25 25 4
gpt4 key购买 nike

代码优先:

# case01
def x():
if False:
#x2 = 22
print x1
else:
print x2

if __name__ == '__main__':
if False:
x1 = 1
else:
x2 = 2
x()

case01的输出:

2

没问题!但是当我取消注释 #x2 = 22if False:阻塞并重新运行,会出现错误:

---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-4-e36cb32b2c83> in <module>()
11 else:
12 x2 = 2
---> 13 x()

<ipython-input-4-e36cb32b2c83> in x()
4 print x1
5 else:
----> 6 print x2
7
8 if __name__ == '__main__':

UnboundLocalError: local variable 'x2' referenced before assignment

据我所知,if False: block 不会执行,但为什么 x2 = 22对我写的脚本有效果吗?

我的Python版本:2.7.13

最佳答案

在开始脚本之前,Python 解释器将其预编译为字节码,当它在函数中看到“x2=22”时,它会将 x2 放入该函数的 __locals__ 中,并将对 x2 的每个引用视为本地 x2 而不是全局 x2。但是,当您启动函数时,您不会为本地 x2 分配任何值,但 Python 仍然只查找本地 x2,因此您会收到错误。

我希望我以易于理解的方式解释,抱歉我的英语不完美)))

关于python - python 中 if 和 else 的 namespace 理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com