有人可以向我解释为什么fails()
中的代码会抛出异常吗?这是某种python 2.7自动升级为全局功能吗?
glist = []
def works():
glist.append("one")
def works2():
for x in glist:
pass
glist.append("two")
def fails():
for x in glist:
pass
glist.append("failbot")
glist = []
if __name__ == "__main__":
works()
works2()
fails()
抛出:
Traceback (most recent call last):
File "autoglobal.py", line 20, in <module>
fails()
File "autoglobal.py", line 12, in fails
for x in glist:
UnboundLocalError: local variable 'glist' referenced before assignment
答案 0 :(得分:1)
在Python中,函数中的名称是全局的,除非您将它们设置为本地名称。您通过在其中一个函数中分配glist
来使其def fails():
for x in glist:
pass
glist.append("failbot")
glist = [] # direct assignment!
:
for
任何“绑定”名称的东西都会使该名称成为本地名称;直接赋值是一种方式,但使用名称的x
循环(如上面函数中的global glist
)也使该名称在当前范围内是本地的。
通过向函数添加glist
来覆盖此项,或不会分配给名称,而是分配给切片。
例如,以下内容未指定名称;它改为分配给现有def fails():
for x in glist:
pass
glist.append("failbot")
glist[:] = [] # clear the list, not rebind the name.
列表对象的所有索引,用一组空索引替换它们:
sess.run()