python – 不直观的UnboundLocalError行为的原因
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 不直观的UnboundLocalError行为的原因,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1635字,纯文字阅读大概需要3分钟。
内容图文
![python – 不直观的UnboundLocalError行为的原因](/upload/InfoBanner/zyjiaocheng/812/66ea59ef51214ed89579de0f490d2a6e.jpg)
注意:有一个非常相似的问题here.但是请耐心等待;我的问题不是“为什么会发生错误”,而是“为什么Python实现为在这种情况下抛出错误.”
我只是偶然发现了这个:
a = 5
def x()
print a
a = 6
x()
抛出UnboundLocalException.现在,我确实知道为什么会发生这种情况(在这个范围的后面,a是绑定的,因此在整个范围内a被认为是本地的).
在这种情况下:
a = 5
def x()
print b
b = 6
x()
这非常有意义.但第一种情况有一个直观的逻辑,这意味着:
a = 5
def x()
print globals()["a"]
a = 6 # local assignment
x()
我想有一个原因是为什么不允许“直觉”版本,但它是什么?虽然这可能是“明确比隐含更好”的情况,但摆弄全局()总觉得我有点不洁净.
从这个角度来看,发生在我身上的实际情况是别人的剧本,我不得不改变一下.在我的(短暂的)更改中,我在脚本运行时进行了一些文件重命名,所以我插入了
import os
os.rename("foo", "bar")
进入脚本.这个插入发生在一个函数内部.模块已经在顶级导入了os(我没有检查),并且一些os.somefunction调用函数内部,但在插入之前.这些调用显然触发了UnboundLocalException.
那么,有人可以向我解释这个实现背后的原因吗?是为了防止用户犯错误? “直观”的方式会让字节码编译器的内容变得更复杂吗?或者是否有一种我没有想到的歧义?
解决方法:
具有相同的,相同的名称指的是在相同的线性代码流中完全不同的变量是如此令人难以置信的复杂性,它使思想错开.考虑:
def aaaargh(alist):
for x in alist:
print a
a = 23
这个代码应该在你想要的Python变体中做什么?在同一个print语句中的a是指在循环的第一段与第二段上的完全不同且不相关的变量(假设有第二段)?即使对于一个项目的列表,它的工作方式是否与非循环代码不同?说真的,疯狂就是这样 – 甚至不考虑可怕的实现问题,只是试图记录和教导这可能会让我转换语言.
对于语言,其实施者,教师,学习者,实践者,承担所有这些概念负担,支持和鼓励全球变量的半隐藏,非显性使用,将会是什么?这似乎不值得一个目标,现在呢?!
内容总结
以上是互联网集市为您收集整理的python – 不直观的UnboundLocalError行为的原因全部内容,希望文章能够帮你解决python – 不直观的UnboundLocalError行为的原因所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。