• Python进阶02 作用域


    一、作用域

    作用域针对变量而言,指申明了变量在程序里的可应用范围。

    只有函数,类,模块会产生作用域,代码块不会产生作用域。例如for循环,if判断都不产生作用域。

    二、作用域链

    Python中作用域链,变量会由内到外去找,先去自己的作用域找,自己没有在去上级去找,一直到找不到报错。

    特性:函数未执行之前,作用域已经形成,作用域链也生成了。

    name = "lzl"
     
    def f1():
        print(name)
     
    def f2():
        name = "eric"
        f1()
    f2()
    结果:
    lzl

    这里有解释:

    在f2中执行f1时,f1的作用域链已经形成,向上级找,name为lzl。

    三、全局变量和局部变量

    全局变量:所有函数之外定义的变量。

    局部变量:函数内部定义的变量或者类,模块里的变量。

    函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。

    (即声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,那么局部变量名字会覆盖全局变量名字。)

    a = 10
    b = 20
     
    def fun():
     
        a = 1
        b = 10
        print('locals: ', locals())
    
    fun()
    print('globals: ', globals())
    
    结果:
    locals:  {'a': 1, 'b': 10}
    globals:  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10a2f0080>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Volumes/DATA/python/python_test/test.py', '__cached__': None, 'a': 10, 'b': 20, 'fun': <function fun at 0x10a283268>}

    四、在函数中使用全局变量(务必慎用全局变量)

    如果只是读取全局变量不会有任何问题。

    如果想重新关联全局变量,则需要借助关键字global。

    _num = 100
    
    def func():
        global _num  # 声明这个Num是全局。如果全局变量已经有这个Num变量那就是指的它 如果全局没这个Num那就新定义一个全局变量。
        _num = 200
        print(_num)
    
    func()
    print(_num)  # 输出200 说明修改的就是全局变量

    参考文章:

    https://www.cnblogs.com/goldsunshine/p/10948475.html

  • 相关阅读:
    “大型售票系统”和“真正的电商系统”在“库存”巨大的差异计算
    c#有关udp可靠传输(包传输数据包) 升级
    CreateCompatibleDC工作原理
    Android 内存管理 &amp;Memory Leak &amp; OOM 分析
    ubuntu文本界面乱码的中国解决方案
    hdu 4972 A simple dynamic programming problem(高效)
    java定义和实现接口
    HTTP 404
    pcre函数具体解释
    Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12516323.html
Copyright © 2020-2023  润新知