变量的作用域

Python 变量的作用域:

变量:变量即可变的,与之对应的概念是常量,常量是固定的。

变量的作用域必须满足LEGB规则;

LEGB表示的是变量名作用域的四类,还可以表示的是变量名在作用域中的引用顺序问题;

四类:局部作用域(Locals)>嵌套作用域(Enclosing function) >全局作用域(Globals) >内置作用域(Built-in)

也可以理解为同一变量引用就近原则;

局部变量:通常变量声明在函数中、方法中、类中、代码块中,该变量只能够应用在当前语句块中,外部无法调用;

全局变量:通常表示的是声明在类外、函数外、模块外的变量;该变量可以应用在整个模块(一个py文件即一个模块)中;可以使用global关键字对全局变量重新赋值

嵌套变量:使用nonlocal关键字引用改变函数之间嵌套所产生的变量,既不属于全局变量也不属于局部变量;

内置变量:表示的是系统内置的变量,该内置变量对象可以直接引用和重新赋值

注: nonlocal关键字:如果外函数与内函数之间的变量被引用成全局变量的话,那么嵌套变量则不存在,且在内函数中使用nonlocal关键字进行引用嵌套变量将会提示经典的异常:没有绑定的变量

例1:

week_day = "Monday"

def get_week_day():
global week_day
week_day = "Tuesday"
def get_week_day2():
nonlocal week_day
print("today is %s" % week_day)
get_week_day2()
print("today is %s" % week_day)

get_week_day()
运行结果:

  nonlocal week_day
  ^
  SyntaxError: no binding for nonlocal 'week_day' found

例2:

week_day = "Monday"

def get_week_day():
global week_day
week_day = "Tuesday"
def get_week_day2():
week_day = "Wednesday"
def get_week_day3():
nonlocal week_day
week_day = "Thursday"
print("today is %s" % week_day)
get_week_day3()
print("today is %s" % week_day)
get_week_day2()
print("today is %s" % week_day)

get_week_day()
print("today is %s" % week_day)

运行结果:

  today is Thursday
  today is Thursday
  today is Tuesday
  today is Tuesday

posted @ 2020-05-22 10:50  alex_qing  阅读(361)  评论(0)    收藏  举报