• 名称空间


    名称空间:
      内置 全局 局部

      内置命名空间 存放python解释器为我们提供的名字list str tuple之类的
      全局命名空间 直接在py文件中,函数外部声明的变量都是属于命名空间
      局部命名空间 在函数中声明的变量

    取值顺序:
    在局部取值的时候:
        局部空间 全局空间 内置空间
      在全局取值的时候:
        全局空间 内置空间
      从小范围到大范围逐步寻找

    
    
    加载顺序:
    1.内置空间
    2.全局空间
    3.局部空间
    作用域:就是作用范围,按照生效范围来分为全局作用域和局部作用域
    全局作用域:包含命名空间和全局命名空间 在整个文件的任何位置都可以能被引用,全局有效(遵循从上到下逐步执行)
    局部作用域:只能在局部空间,只能在局部内或者函数内部可以使用
    globals() 查看全局变量
    locals() 查看局部变量
    a = 10
    def func():
        a = 40
        b = 20
        def abc():
            print("哈哈")
            print(a, b)     # 这里使用的是局部作用域
            print(globals())    # 打印全局作用域中的内容
            print(locals())     # 打印局部作用域中的内容
        abc()
    func()
    结果:

    哈哈
    40 20
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000006B5A20>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/Administrator/PycharmProjects/untitled/函数复习.py', '__cached__': None, 'a': 10, 'func': <function func at 0x00000000003B1E18>}
    {'b': 20, 'a': 40

      

    修改全局变量:

    a = 10
    def func():
        def abc():
            global a #声明修改全局变量a
            a = 22  #对a进行修改
            print(a)
        abc()
    func()
    print(a)
    结果:
    22
    22

    global修改全局变量 但是只能在局部修改 在全局会报错,glabol(仅限于字符串 和 数字)

    a = 10
    def func():
        a = 22
        def abc():
            nonlocal a  #声明父类离得最近的非全局变量a
            a =66    #对a进行修改
            print(a)
        abc()
        print(a)
    func()
    print(a)
    结果:
    66
    66
    10

    nolocal修改父类离得最近的非全局的变量



  • 相关阅读:
    MyBatis原理分析
    oracle修改数据遇到的坑
    oracle查询时遇到的坑
    maven镜像
    易错题
    binlog2sql 安装使用
    Archery SQL审核平台搭建
    Docker安装
    夜莺n9e监控搭建
    influxdb安装
  • 原文地址:https://www.cnblogs.com/shicongcong0910/p/10387747.html
Copyright © 2020-2023  润新知