17. Python-变量作用域

78 阅读1分钟

最近总是变量的访问的范围,搞的我很迷茫,故此总结一下。

全局变量和局部变量

  1. 访问:变量就近访问原则
  2. 修改:只能修改自己域内的变量
key = "全局变量"
def func():
    print(key) # 全局变量

func()
print(key) # 全局变量
key = "全局变量"
def func():
    key = "局部变量"
    print(key) # 局部变量

func()
print(key) # 全局变量
key = "全局变量"
def func1():
    key = "局部变量1"
    print(key) # 局部变量1

    def func2():
        key = "局部变量2"
        print(key) # 局部变量2

    func2()
    print(key) # 局部变量1

func1()
print(key) # 全局变量

global 关键字可在局部修改全局变量

key = "全局变量"
def func():
    global key
    key = "局部变量"
    print(key) # 局部变量

func()
print(key) # 局部变量

代码块中的临时变量

代码块中的临时变量可在代码块外使用,注意和函数中的局部变量区分开。

for i in range(3):
    print(i)
    a = 1000

print(i)
print(a)

self 定义的变量范围

类变量当被修改后,全局的该类变量都会被修改。

这与全局变量和局部变量的访问、修改从逻辑上是不同的。

b = 20
class T:
    b = 4
    def __init__(self):
        self.a = 3

    def func1(self):
        self.a = 100
        T.b = 4000

    def func2(self):
        print(self.a) # 100
        print(T.b) # 4000

t = T()
t.func1()
t.func2() 
print(b) # 20