美文网首页
python-命名空间

python-命名空间

作者: 除囧 | 来源:发表于2017-07-15 14:51 被阅读0次

问题

之前一个同学写 python 时遇到了一个错误,我看了 python 的报错提示,如下:

UnboundLocalError: local variable 'lst' referenced before assignment

当时觉得是和 python 的命名空间有关。他那句代码写在一个 for 循环里,for 又在一个函数里,因此我武断的觉得应该是 for 里的命名空间和函数里的命名空间不同,函数里的命名空间只能往上走,不能往下走,也就是说在 for 外面的变量不能在 for 里面进行操作。这时旁边一个老板说不是这样。所以回来之后我就去找了相关资料,发现确实不是那样。

命名空间

python 的命名空间主要有三层:

  1. 局部命名空间: 函数,类
  2. 全局命名空间: 模块
  3. 内置命名空间: 系统

查找顺序是 局部=》全局=》内置

命名空间的生命周期

  1. 局部的在返回结果,抛出异常,被删除就结束了。
  2. 全局的在 import 时创建,保存到解释器退出。
  3. 内置的在解释器启动时创建,保存到解释器退出。

注意:

Python 的一个特别之处在于其赋值操作总是在最里层的作用域。赋值不会复制数据——只是将命名绑定到对象。删除也是如此:"del y" 只是从局部作用域的命名空间中删除命名 y 。
--Python命名空间的本质

命名空间的访问

  1. 局部命名空间: locals()
  2. 全局命名空间: glocals()

注意:

locals 实际上没有返回局部名字空间,它返回的是一个拷贝。所以对它进行改变对局部名字空间中的变量值并无影响。
globals 返回实际的全局名字空间,而不是一个拷贝。所以对 globals 所返回的 dictionary 的任何的改动都会直接影响到全局变量。
--Python命名空间的本质

参考

http://www.cnblogs.com/windlaughing/archive/2013/05/26/3100362.html

相关文章

  • python-命名空间

    问题 之前一个同学写 python 时遇到了一个错误,我看了 python 的报错提示,如下: UnboundLo...

  • python-命名空间和作用域

    前言 前段时间写脚本的时候,在调用函数的时候,一直在想在python中函数的参数是传值还是传引用?先看一下下面两个...

  • Hbase 查询语句

    进入HBase数据库 HBase帮助命令: 命名空间 列出所有命名空间 新建命名空间 删除命名空间 该命名空间必须...

  • NDK开发:C++基础

    一、命名空间 standard:标准命名空间 命名空间类似于java中的包。 自定义命名空间 使用命名空间 ::为...

  • Chapter 18 Large-scale project t

    命名空间 inline命名空间 inline声明的命名空间, 可以无视本层命名空间, 而可以被直接使用. 用处: ...

  • C#随笔1

    1命名空间 语法 namespace 命名空间名称{若干个类型} ORnamespace 命名空间名称.子命名...

  • 07_Python函数进阶_全栈开发学习笔记

    # 1. 命名空间 ## 1.1 命名空间的种类 命名空间共有有三种 1) 内置命名空间 —— python解释器...

  • python-命名空间、作用域,和局部函数

    命名空间 Python中变量的使用有作用域的问题,即命名空间(namespace)。任何在函数中 赋值...

  • C++入门05 --命名空间,继承,访问权限,初始化列表

    命名空间 命名空间主要是用来解决命名冲突的; namespace xxxx { }:命名空间的定义; 利用::域运...

  • 命名空间 namespace

    /*命名空间:命名空间是一种封装事物的方法命名空间怎么声明?关键字: namespace 导入命名空间: use起...

网友评论

      本文标题:python-命名空间

      本文链接:https://www.haomeiwen.com/subject/waaahxtx.html