• python变量名解析总结


    1 python变量名解析总结

    点号和无点号变量名,用不同的处理方式。

    (1) 无点号的变量名,比如X,使用的是作用域。

    (2) 有点号的变量名,比如obj.X,使用对象的命名空间。

    (3) 模块和类对对象的命名空间进行初始化。

    1.1 无点号变量名

    无点号变量名遵循LEGB作用域规则。

    1.1.1 赋值本地变量

    X = value

    赋值语句,使变量名成为本地变量。

    1.1.2 引用变量

    引用变量X时根据LEGB作用规则搜索变量X:当前本地作用域搜索,之后在嵌套的函数中搜索,然后在全局作用域搜索,最后在内置作用域搜索。

    1.2 点号变量名

    点号的变量名是特定对象的属性。

    1.2.1 命名空间赋值

    obj.X = value

    在进行点号运算的对象obj的命名空间内创建或修改属性名X。

    1.2.2 引用点号变量

    obj.X

    类:先在对象内搜索变量名X,然后在可读取的超类上使用继承搜索变量名X。

    模块:直接从模块读取X。

    1.3 python变量名分类

    python变量赋值位置决定了变量的作用域或命名空间,即变量可访问范围。

    NO赋值位置分类描述
    1模块顶层赋值全局变量都可访问
    2函数内部赋值本地变量函数内部可访问
    3方法内部赋值本地变量方法内部可访问
    4类主体内赋值类数据属性类、实例和行为可访问
    5方法self赋值实例属性实例可访问

    1.3.1 模块内访问变量

    # vars.py
    # 模块属性
    X = 91
    
    def f1():
        print(X)
        
    def f2():
        # 函数本地变量
        X = 92
        print(X)
        
    class C1(object):
        # 类属性
        X = 93
        def m1(self):
            # 方法本地变量
            X = 94
            # 实例属性
            self.X = 95
            
    if __name__ == '__main__':
        print(X)    # 91
        f1()        # 91
        f2()        # 92
        print(X)    # 91
        
        c = C1()
        print(c.X)  # 93
        
        c.m1()
        print(c.X)  # 95
        print(C1.X) # 93
        
        try:
            # 函数外不可访问本地变量
            print(f2.X)
        except Exception as e:
            print('f2.X={}'.format(e))
        
        try:
            # 方法外不可访问本地变量
            print(C1.m.X)
        except Exception as e:
            print('C1.m.X={}'.format(e))
            
    ''' 运行结果
    E:\documents\F盘>python vars.py
    91
    91
    92
    91
    93
    95
    93
    f2.X='function' object has no attribute 'X'
    C1.m.X=type object 'C1' has no attribute 'm'
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    1.3.2 模块外访问变量

    >>> import os
    >>> os.chdir(r'E:\documents\F盘')
    >>> import vars
    >>> X = 96
    >>> print(X)
    96
    >>> print(vars.X)
    91
    >>> vars.f1()
    91
    >>> vars.f2()
    92
    >>> print(vars.C1.X)
    93
    >>> c = vars.C1()
    >>> print(c.X)
    93
    >>> c.m1()
    >>> print(c.X)
    95
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    1.3.3 global和nonlocal变量

    python的global语句用于def函数内定义全局变量。在函数外也可以引用此变量。

    python中如果要修改嵌套作用域变量的值,就用nonlocal语句。

    >>> S = '梯阅线条'
    >>> def g1():
        print(S)
    
    >>> def g2():
        global S
        S = 'tyxt'
        
    >>> g1()
    梯阅线条
    >>> g2()
    >>> print(S)
    tyxt
    
    >>> def n1():
        S = 9555
        def n11():
            print(S)
        return n11
    
    >>> n1()()
    9555
    >>> def n2():
        S = 9555
        def n21():
            nonlocal S
            print(S)
            S = 9666
            print(S)
        return n21
    
    >>> n2()()
    9555
    9666
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    centos启动tomcat 并指定jdk 版本
    Day5:三指针描述一颗树
    UI设计模式是什么?有哪些常用的?
    C进阶 - 指针进阶
    ceph集群巡检项
    缓冲区、通道、选择器
    Springboot集成ORM框架开发(保姆级)
    认识一下MRS里的“中间人”Alluxio
    [攻防世界 XCTF 4th-WHCTF-2017] BABYRE
    大数据学习(17)-mapreduce task详解
  • 原文地址:https://blog.csdn.net/sinat_34735632/article/details/134483714