python 变量作用域

Python中变量的作用域可分为4种:

本地作用域:没有内部函数时,函数体为本地作用域。

函数嵌套作用域:包含内部函数时,函数体为函数嵌套作用域

文件作用域:程序文件(也称模块文件)的内部为文件作用域。

内置作用域:Python运行时的环境为内置作用域,它包含了Python的各种预定义变量和函数

内置和文件作用域可称为全局作用域

 作用域外部的变量和函数可以在作用域内使用;

相反,作用域内的变量和函数不能在作用域外使用

全局变量:内置作用域和文件作用域钟定义的变量和函数

局部变量:在函数嵌套作用域和本地作用域内定义的变量和函数

本地优先:当作用域外和作用域内的变量名称相同时,以本地优先,默认屏蔽外面的变量

a=1
def show():
    print('a=',a)
    a=2
show()

 这样会出错是因为在函数中,引用了变量a,但是在函数中内部a的赋值语句,所以函数内部是内部a的作用域

因此会出错

1,global 声明变量为全局变量

def show():
    global a
    a=2
    print('a=',a,sep='')
show()
print(a)

def show():
    global a
    print(a)
    a=5
a=1
show()
print(a)

2,nonlocal原则

作用域隔离原则同样适用于嵌套函数。在嵌套函数内使用与外层函数同名的变量时,

若该变量在嵌套函数内部没有被赋值,则该变量就是外层函数的本地变量

def show():
    def hh():
        nonlocal a  #表示a时外层函数的本地变量
        print(a)
    a=2 #a必须定义在调用hh之前
    hh()
show()

 

nonlocal不能定义在最外层函数中

原文地址:https://www.cnblogs.com/fengzhiyuan/p/13942861.html