美文网首页
Python中变量的作用域

Python中变量的作用域

作者: 05ea6e176933 | 来源:发表于2018-10-21 22:43 被阅读0次

    python的作用域并不是哪里都能访问的,类似于Java,分全局和局部,python变量的作用域大概分为以下四类:

    • L(local) 局部作用域
    • E(Enclosing) 闭包函数外的函数中
    • G(Global) 全局作用域
    • B(Built-in) 内建作用域

    遵循LEGB原则:以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

    x = int(2.9)  # 内建作用域
    
    g_count = 0  # 全局作用域
    def outer():
        o_count = 1  # 闭包函数外的函数中
        def inner():
            i_count = 2  # 局部作用域
    

    在python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if…..else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的

    dataList = [1, 2, 3, 4]
    for data in dataList:
        a = 1   #for循环中的变量a
        b = data + a
    
    print(a) #在函数外也可视为全局变量使用
    

    全局变量是指在函数外的变量,可以在程序全局使用,局部变量是指定义在函数内的变量,只能在函数内被声明使用

    若内部作用域的想要修改外部作用域的变量,就要使用global关键字:参考一下代码

    1.未使用global关键字

    a = 1
    
    
    def demo():
        # IDE提示a = 123:This inspection detects shadowing names defined in outer scopes
        # 大概意思是给变量取的这个名字,可能会冲突,它是函数外部的变量
        a = 123
        print(a)
    
    demo()
    print(a)
    

    运行结果是

    123
    1
    #全局变量a的值还是1,没有被改变
    

    2、使用global关键字

    a = 1
    
    def demo():
        global a
        a = 123
        print(a)
    
    demo()
    print(a)
    

    运行结果是

    123
    123
    #全局变量a的值被修改
    

    nonlocal 关键字的使用方法和global关键字类似,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量

    def outer():
        num = 10
        def inner():
            nonlocal num   # nonlocal关键字声明
            num = 100
            print(num)
        inner()
        print(num)
    outer()
    

    运行结果为

    100
    100
    #闭包函数外的变量num值被修改
    

    相关文章

      网友评论

          本文标题:Python中变量的作用域

          本文链接:https://www.haomeiwen.com/subject/blwizftx.html