Python变量作用域-全局作用域与本地作用域冲突



根据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

最新更新