美文网首页
Python——作用域和命名空间

Python——作用域和命名空间

作者: shijiatongxue | 来源:发表于2019-03-13 21:13 被阅读0次

高阶提示:对于高级Python程序员来说,了解这个主题是有用的。
首先我们先看一下,作用域和命名空间是什么?

1 命名空间(Namespace)

一个名字到对象的映射。

有点像字典的功能。命名空间举例来说有:内置的函数;模块里面的全局变量;函数里面的局部变量。一个对象的属性也是一个命名空间。命名空间的作用是为了防止名字(函数等)的冲突。
这里的属性指的任何在点之后的名字。如:z.real,则real是对象z的属性。

from math import random
a = 'love'

这种情况下,random和a在同一个命名空间。

命名空间的生存周期

内置的命名空间,在解释器启动之后被创建、从不被删除;
全局的命名空间在模块启动后创建,持续到解释器关闭;
局部的命名空间在函数被调用时启动,函数返回或出现错误时结束;递归调用也如此。

2 作用域(scope)

作用域是一个python程序的文本区域,其中可以直接访问命名空间。

在执行期间的任何时候,至少有三个可直接访问其命名空间的嵌套作用域:

  • 首先搜索的作用域为本地名称,local;
  • 嵌套作用域,non local,non global;
  • 模块的全局名称,global;
  • 最外层的是内置的命名空间。

通常情况下,本地名称指的是当前的函数(或类);出了函数,就是模块的全局命名空间;

3 例子

作用域和命名空间.png

可以看出,我们在主函数里面命名了一个spam,它属于non-local变量;
对于do_local函数里面的spam,它优先处理的是局部变量;
对于do_global函数里面的spam,它属于全局变量,无法对non-local变量进行修改。

感想:

  • 考虑变量的搜索范围,优先在自己的范围进行搜索;
  • 默认对参数的设置为当前范围;如在函数里就是local,在模块里就是global。
  • 若函数内对全局变量进行修改,需要声明这个变量就是全局的那个变量,加上global标识符。

参考文献:
Python-tutorial

相关文章

  • 【第10天】python全栈从入门到放弃

    1.动态参数 *位置参数 **关键字参数 2.命名空间和作用域 2.1 命名空间 内置命名空间: python解释...

  • 2021-12-10 Python-13

    自建函数 1.命名空间、作用域和本地函数Python 变量有全局和局部两种作用范围。命名空间就是用来描述变量的作用...

  • Python命名空间和作用域

    准备知识: 1.在Python解释器开始执行之后,机会在内存中开辟一个空间,每当遇到 一个变量的时候,就把变量和值...

  • Python——作用域和命名空间

    高阶提示:对于高级Python程序员来说,了解这个主题是有用的。首先我们先看一下,作用域和命名空间是什么? 1 命...

  • Python命名空间和作用域

    Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 key为变量名,value为变量值的字典 内置...

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

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

  • Python进阶 - 命名空间与作用域

    Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的...

  • 变量作用域

    0. 命名空间 变量作用域1. 变量作用范围:可操作范围2. Python 是静态作用域,变量的作用域源于它在代码...

  • Python中的LEGB规则

    前言 理解LEGB前,首先需要对Python的作用域、命名空间有一定的了解,话题才能继续展开。 命名空间 命名空间...

  • LEGB

    理解LEGB前,首先需要对Python的作用域、命名空间有一定的了解,话题才能继续展开。 命名空间 命名空间表示变...

网友评论

      本文标题:Python——作用域和命名空间

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