Python-变量的作用域

目录: https://www.jianshu.com/p/863c446364a8

变量的作用域

在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。

作用域的类型

 L(Local) 局部作用域(函数体内)

E (Enclosing)嵌套作用域( 闭包函数外的函数中)

G (Global) 全局作用域(全局范围内)

B (Built-in) 内置作用域(内置函数所在模块的范围)

作用域的优先级:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域  即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

实例:

import builtins

print(dir(builtins))     # 内置作用域,需要引用builtins模块

li=['1','2','3',"a","b","c"] #嵌套作用域(函数外定义的)

def a(lis):

    global li1

    li1 = []          #li1 全局变量必须global定义

    for i in lis:              # i为局部变量

        if 48<ord(i)<59:     

          li1.append(i) 

    return li1

b=a(li)

print(li1)

print(b)

print(li)

运行结果为:

['1', '2', '3']

['1', '2', '3']

['1', '2', '3', 'a', 'b', 'c'] 

global和 nonlocal关键字

(nonlocal关键字声明,会在上一层重新定义此变量。)

实例:

def outer():

    global num          #需要使用 global 关键字声明,直接声明为全局变量。

    print(num)         #此时输出的num值为初始定义的2

    num=123

    print(num)       #此时的num值为重新赋值后的值

num=2

outer()

print(num)     #因为num为全局变量,所以num为改变后的值

运行结果为:

2

123

123

def outer():

    num=10

    print(num)        

    def inner():

        nonlocal num            ##nonlocal关键字声明,会在上一层重新定义此变量。

        num=100

        print(num)

    inner()

    print(num)

outer()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。