认识作用域

变量作用域指的是变量生效的范围,主要分为两类: 局部变量全局变量

局部变量

在函数中创建的变量,默认作用域是整个函数,被称为局部变量。

  1. def testA():
  2. a = 100 # 函数体内部定义的变量
  3. print(a)
  4. testA()
  5. print(a)
  6. -----------------------------------------------------------------
  7. >>> 100
  8. >>> name 'a' is not defined # 局部变量调用完即销毁所以外部无法访问

局部变量作用: 在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量

全局变量

在模块中创建的变量,作用域是整个模块被称为全局变量。

  1. a = 150 # 函数体外部定义的变量
  2. def testA():
  3. print(a)
  4. def testB():
  5. print(a)
  6. testA()
  7. testB()
  8. --------------------------------------------------------------
  9. >>> 150
  10. >>> 150

在函数外部定义的变量,如果函数体内没有定义该变量,也可以进行调用。

全局变量与局部变量存在

如果同时存在,局部变量不会受全局变量影响

  1. a = 100
  2. def testA():
  3. print(a)
  4. def testB():
  5. a = 20
  6. print(a)
  7. testA() >>> 100
  8. testB() >>> 20
  9. print(a) >>> 100

局部变量转全局变量

通过 global 将局部变量转为全局变量

  1. a = 100
  2. def testA():
  3. print(a)
  4. def testB():
  5. global a # 先用 global 声明变量
  6. a = 20
  7. print(a)
  8. testA() >>> 100 # 根据程序运行顺序,这一步不受影响
  9. testB() >>> 20
  10. print(a) >>> 20

多函数的执行顺序

  1. a = 0
  2. def testA():
  3. global a
  4. a = 100
  5. def testB():
  6. print(a)
  7. print(a) >>> 0 # 打印全局变量,因为后面程序未执行
  8. testA() >>> # 修改局部变量为全局变量,并为变量重新赋值
  9. testB() >>> 100 # 执行修改后的代码

上述代码中表明 Python 程序是从上至下逐步执行,先查看函数内部是否有变量(且没有申明是外部变量),那么内部变量不会受外部同名变量影响,如果函数内部没有变量则使用外部变量作为自己的变量