zoukankan      html  css  js  c++  java
  • Python命名空间与作用域

    名称空间

    • 名称空间(namespaces):用于存放名字与内存地址绑定关系的地方,是对栈区的划分
    • 作用:名称空间可以使栈区中存放相同的名字,从而解决命名冲突
    • 名称空间分为三种:
      1. 内置名称空间
      2. 全局名称空间
      3. 局部名称空间

    内置名称空间

    • 内置名称空间:用于存放Python解释器中内置的名字
    • 生命周期:Python解释器启动则产生,Python解释器关闭则销毁
    • 例如:printinputint ...

    全局名称空间

    • 全局名称空间:运行顶级代码所产生的名字,或者说除函数内定义以及内置的外,剩下的都是全局名称空间
    • 生命周期:Python文件执行时产生,Python文件执行完毕后销毁
    • 例如:
    # 变量名a
    a = 1
    
    # 函数名func
    def func():
    	pass
    
    # 类名MyClass
    class MyClass:
    	pass
    

    局部名称空间

    • 局部命名空间:在调用函数时,运行函数体代码过程中产生的函数内的名字
    • 生命周期:函数调用时产生,函数调用完毕后销毁
    • 例如:
    def func(x, y):
        pass
    
    func(1, 2)
    

    名称空间的先后顺序

    • 名称空间加载顺序:内置名称空间 -> 全局名称空间 -> 局部名称空间
    • 名称空间销毁顺序:局部名称空间 -> 全局名称空间 -> 内置名称空间
    • 名字的查找优先级:从当前所在位置向上一层一层查找

    作用域

    全局作用域

    • 全局作用域:内置名称空间、全局名称空间
    • 特点:
      1. 全局存活
      2. 全局有效:被所有函数共享

    局部作用域

    • 局部作用域:局部名称空间
    • 特点:
      1. 临时存活
      2. 局部有效:函数内有效

    LEGB原则

    找寻变量的调用顺序采用LEGB原则(即就近原则)
    B —— Builtin(Python);Python内置模块的命名空间 (内建作用域)
    G —— Global(module); 函数外部所在的命名空间 (全局作用域)
    E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
    L —— Local(function);当前函数内的作用域 (局部作用域)
    依据就近原则,从下往上 从里向外 依次寻找

    global与nonlocal

    • global:声明全局变量获修改全局变量
    • nonlocal:修改局部变量(当前函数上一层的局部变量)
    # global的使用
    x = 1
    def func():
    	global x
    	x = 2
    func()
    print(x)
    
    # nonlocal的使用
    def func1():
    	x = 1
    	def func2():
    		nonlocal x
    		x = 2
    	func2()
    	print(x)
    func1()
    

    总结

    1. 名称空间是对栈的一种划分,真正存在的是栈区。名称空间只是一种虚拟的划分
    2. 名称空间只有优先级之分,并无没有嵌套关系
    3. 名称空间的“嵌套关系”决定了名字的查找顺序
    4. 名称空间的“嵌套关系”以函数定义阶段为准
  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/kangyz/p/14032892.html
Copyright © 2011-2022 走看看