Python声明global关键字后仍报NameError: name 'a'未定义问题求助
报错原因
global关键字的作用是声明当前作用域内使用的变量来自全局作用域,但它不会自动帮你创建全局变量,你需要在调用change_a()函数之前,先在全局作用域给a赋初始值才行。你现在的代码在第一次执行if not(i==a)判断的时候,全局的a还没有被定义,自然就会抛出NameError。
解决方案
给你两种可行的实现方式,可按需选择:
方式1:提前定义全局初始值
在调用函数之前先给全局变量a赋值初始状态即可兼容你现有代码逻辑:
a = 'O' # 先定义全局初始值 def change_a(): global a for i in ['O','X']: if not(i==a): a=i break # 测试效果 change_a() print(a) # 输出 X change_a() print(a) # 输出 O
方式2:无全局变量的更简洁实现
用函数返回值的方式可以避免全局变量污染,逻辑也更清晰易维护:
def toggle_value(current): return 'X' if current == 'O' else 'O' # 测试效果 a = 'O' a = toggle_value(a) print(a) # 输出 X a = toggle_value(a) print(a) # 输出 O
内容的提问来源于stack exchange,提问作者Rolling Happy
相关产品推荐
相关产品推荐

