未被驯化的甲鱼 发表于 2020-5-8 11:27:26

大佬们,为什么global这种情况会报错?

原版,这样是可行的
a = 1
def h():
      global a
      a = 0
      print('函数内a等于%d'%a)
h()
print('函数外a等于%d'%a)
输出
函数内a等于0
函数外a等于0

----------------------------------
改成这样就不行了
a = 1
def h():
    if a == 1:
      global a
      a = 0
      print('函数内的%d'%a)
h()
print('函数外的%d'%a)
报错
name 'a' is used prior to global declaration

这是为什么?

wuqramy 发表于 2020-5-8 11:28:58

本帖最后由 wuqramy 于 2020-5-8 11:30 编辑

你要先global a后才能使用a(才能判断)
正确代码:
a = 1
def h():
    global a
    if a == 1:
      a = 0
      print('函数内的%d'%a)
h()
print('函数外的%d'%a)

永恒的蓝色梦想 发表于 2020-5-8 11:29:04

改成a = 1
def h():
    global a
    if a == 1:
      a = 0
      print('函数内的%d'%a)
h()
print('函数外的%d'%a)

suchocolate 发表于 2020-5-8 11:29:34

先声明后调用
global a 挪到if前一行去

Mrzhou1201 发表于 2020-5-8 14:37:33

suchocolate 发表于 2020-5-8 11:29
先声明后调用
global a 挪到if前一行去

这是一个书上没有的知识点,记下来了
页: [1]
查看完整版本: 大佬们,为什么global这种情况会报错?