python 作用域 执行顺序问题

z = 0

def fun():
    print(z)
    global z
    z = 2
    print(z)

fun()
print(z)

以上代码为啥会报 global 的错
顺便讲下这串代码的执行顺序
阅读 2.5k
2 个回答

因为你在global z之前加了print(z),这样相当于引用z,这是非法的。

z = 0

def fun():
    global z
    print(z, id(z))
    z = 2
    print(z, id(z))

fun()
print(z, id(z))

之所以这么要求,是因为还会出现下面这种歧义性的错误,不可以在引用之后再去赋值绑定一个变量,Python会认为应当是局部变量:

z = 0
def fun():
    #global z
    print(z)
    z = 2
    print(z)

fun()
print(z)

但是可以直接print,即隐式地global:

z = 0

def fun():
    print(id(z))

fun()
print(id(z))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏