在python中阻止作用域 - 它是否类似于函数内部的javascript提升?

Jam*_*nco 10 javascript python

我目前正在尝试理解python中的这段代码

def foo(a):
  if a==12:
    var = "Same"
  else:
    var = "different"
Run Code Online (Sandbox Code Playgroud)

我阅读并理解python不支持基于块的范围的事实.因此,在函数内部创建的所有内容(无论是在循环内还是在条件语句中)都可以公开地用于函数的其他成员.我还在这里阅读了作用域规则.在这一点上,假设这些内部范围变量在函数内被提升就像它们在javascript中被提升一样是否相同?

Sha*_*ger 9

你说对了.在未明确声明的函数内部分配的任何名称global(使用Py3添加nonlocal以指示它不在本地范围内,而是查看包装范围而不是直接跳到全局范围)是从函数开头的局部变量(它在本地数组中保留了空间),但在分配之前读取它会引发UnboundLocalError.

  • @GreenAsJade:只有在函数范围内引用变量时才合法(因为函数在定义时实际上并未执行,并且在调用时懒惰地查找它们的全局变量)。如果它在定义之前在全局或类定义范围内被引用,它将失败。 (2认同)