python变量的作用域
什么是作用域?
作用域就是一个 程序可以直接访问命名空间的正文区域。
在一个 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
以C语言为例,C语言的作用域是使用一对括号{ }
划分的的,就是一个{ }
中定义的变量,只能在对应的{ }
中使用。
以下的情况在 C语言中不允许的:(会报a变量找不到的错误)
python的作用域
而关于python的作用域却不太一样,刚刚接触python时候发现,在python中的if 语句
、for语句
、while语句
中定义的的变量外部也能用,他们竟然是全局变量??
答案是:对的,在python中的if 语句
、for语句
、while语句
定义的就是全局变量,这里需要和C语言有所区别。
验证如下:
#在if控制语句中声明变量
if True:
a = 3
if(a > 0):
b = 4
print(f"a = {a}")
print(f"b = {b}")
#在for循环中声明变量
for i in range(10):
print( i, end='')
if(i == 5):
c = i
print()
print(f"i = {i}")
print(f"c = {c}")
#在while循环中声明变量
count = 5
while count > 0:
print( count, end='')
d = count
count -= 1
print()
print(f"d = {d}")
#外部函数可以调用到if语句和for语句中声明的变量
def fun():
print(f"a in fun = {a}")
print(f"b in fun = {b}")
print(f"c in fun = {c}")
print(f"d in fun = {d}")
fun()
运行结果:
上面的结果,验证了自己的观点,python的的作用域不仔细看还是容易踩坑的。
简单来说,在python中只有模块,类,和函数才会产生新的作用域,所以if 语句
、for语句
、while语句
里定义的变量在循环外也能访问,只要他们在同一个作用域里