根据if条件检查中使用的不同条件,变量的全局&本地作用域受到影响。
我也尝试在多个在线IDE中运行以下代码,在大多数运行中,几乎所有代码都会抛出错误消息&并非所有运行
有人能澄清这种行为的原因吗?
#代码示例1:
在函数定义内,在if条件外,变量不包含值!!!,并且抛出错误,但不是在所有运行中
import random
a = 10
def f():
if(random.randint(0,1) == 1):
#if(True):
a = 5
print(f'Under if a is: {a}')
print(f'Outside if a is: {a}')
print(f'Before & Outside f() a is: {a}')
f()
print(f'After & Outside f() a is: {a}')
输出为:
Before & Outside f() a is: 10
Traceback (most recent call last):
File "main.py", line 13, in <module>
f()
File "main.py", line 10, in f
print(f'Outside if a is: {a}')
UnboundLocalError: local variable 'a' referenced before assignment
#代码示例2:
在函数定义内,如果条件外,变量保持局部值,而不是全局赋值
import random
a = 10
def f():
#if(random.randint(0,1) == 1):
if(True):
a = 5
print(f'Under if a is: {a}')
print(f'Outside if a is: {a}')
print(f'Before & Outside f() a is: {a}')
f()
print(f'After & Outside f() a is: {a}')
输出为:
Before & Outside f() a is: 10
Under if a is: 5
Outside if a is: 5
After & Outside f() a is: 10
您在函数范围外声明a=10,然后在这里:
print(f'Outside if a is: {a}')
在函数中使用a
,但仅当随机生成的数字为0时使用。
要使代码工作,您需要将其添加到函数中
def f():
global a
if(random.randint(0,1) == 1):
# and so on