zoukankan      html  css  js  c++  java
  • 11 作用域

    1.命名空间

    什么是命名空间

    比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就很明确了,那么此时的7班就是小王所在的范围,即命名空间

    globals、locals

    在之前学习变量的作用域时,经常会提到局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域

    >>> globals()
    {'__name__': '__main__', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__builtins__': <module 'builtins' (built-in)>, '__doc__': None, 'a': 100, '__spec__': None, '__package__': None}
    >>> 
    >>> def test():
    ...     a = 100
    ...     b = 200
    ...     print(locals())
    ... 
    >>> test()
    {'b': 200, 'a': 100}
    >>> 

    2.LEGB 规则

    Python 使用 LEGB 的顺序来查找一个符号对应的对象

    locals -> enclosing function -> globals -> builtins
    
    • locals,当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量
    • enclosing,外部嵌套函数的命名空间(闭包中常见)
    • globals,全局变量,函数定义所在模块的命名空间
    • builtins,内建模块的命名空间。

     

      1)版本1

     num = 100
     def test():
         num = 200  #当前所在命名空间
         print(num)
     
     test()

      2)版本2:自己有用自己的

    num = 100
    def test():
        num = 200
        def test_in():
            num = 300
            print(num)
        return test_in
    
    ret = test()
    ret()
    
    
    ####
    300

      3)版本3:自己没有到上一层

    num = 100
    def test():
        num = 200  #外部嵌套函数的命名空间(闭包中常见)
        def test_in():
     #       num = 300
            print(num)
        return test_in
    
    ret = test()
    ret()
    
    
    ####
    200

       4)版本4:全局变量

    num = 100     #全局变量,函数定义所在模块的命名空间
    def test():
        # num = 200  
        def test_in():
     #       num = 300
            print(num)
        return test_in
    
    ret = test()
    ret()
    
    
    ####
    100

      5)版本5:内建空间

    python@ubuntu:~/02-就业班/03-高级-$ ipython3
    
    In [2]: dir(__builtin__)
    Out[2]: 
    ['ArithmeticError',
     'AssertionError',
     'AttributeError',
     'BaseException',
     'BlockingIOError',
     'BrokenPipeError',
     'BufferError',
     'memoryview',
     'min',
     'next',
     'object',
     'oct',
     'open',]
  • 相关阅读:
    [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎
    [Learn AF3]第一章 如何使用App Framework 3.0 构造应用程序
    [译]Intel App Framework 3.0的变化
    手机浏览器中屏蔽img的系统右键菜单context menu
    HTML5 touche vents drag to move & AF actionsheet by longTap
    HTML5 FileReader
    【转】Gulp入门基础教程
    【Intel AF 2.1 学习笔记三】
    【Intel AF 2.1 学习笔记二】AF中的页面——Panel
    【Intel AF 2.1 学习笔记一】AF程序结构
  • 原文地址:https://www.cnblogs.com/venicid/p/7940423.html
Copyright © 2011-2022 走看看