python 名称空间与作用域详情

作者:Python 时间:2021-06-10 23:12:38 

函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。

python 名称空间与作用域详情

一、名称空间

名称空间(name spaces):在内存管理那一章节时,我们曾说到变量的创建其实就是在内存中开辟了一个新的空间。但是我们一直在回避变量名的存储,其实在内存中有一块内存空间存储变量名与变量间的绑定关系的空间,而这个空间称为名称空间,真正存名字的地方是栈区,名称空间只是把栈区分成为几个部分,有了名称空间我们就可以在栈区存放相同的名字。

python 名称空间与作用域详情

1.1 内置名称空间

内置名称空间:存放Pyhton解释器自带的名字,如intfloatlen

生命周期:在解释器启动时生效,在解释器关闭时失效

1.2 全局名称空间

全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,如下面代码中的xfunclz

生命周期:在文件执行时生效,在文件执行结束后失效

python 名称空间与作用域详情

1.3 局部名称空间

局部名称空间:用于存放函数调用期间函数体产生的名字,如下面代码的f2

生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效

注意:即使是对同一个函数,即便它是空函数,如果我们对它进行多次调用的话,调用一次产生一个局部名称空间,

python 名称空间与作用域详情

1.4 加载顺序

由于.py文件是由Python解释器打开的,因此一定是在Python解释器中的内置名称空间加载结束后,文件才开始打开,这个时候才会产生全局名称空间,但文件内有某一个函数被调用的时候,才会开始产生局部名称空间,因此名称空间的加载顺序为:内置–》全局–》局部。

1.5 查找顺序

由于名称空间是用来存放变量名与值之间的绑定关系的,所以但凡要查找名字,一定是从三者之一找到,查找顺序为:
从当前的所在位置开始查找,如果当前所在的位置为局部名称空间,则查找顺序为:局部–》全局–》内置。

python 名称空间与作用域详情

二、作用域

域指的是区域,作用域即作用的区域。

2.1 全局作用域

全局作用域:全局有效,被所有的函数共享,包含内置名称空间和全局名称空间。

python 名称空间与作用域详情

2.2 局部作用域

局部作用域:局部有小,临时存储,只包含局部名称空间。

python 名称空间与作用域详情

2.3 注意点

需要注意的是:作用域关系在函数定义阶段就固定死了,与函数的调用无关。

python 名称空间与作用域详情

2.4 函数对象+作用域应用

python 名称空间与作用域详情

三、补充知识点

3.1 global关键字

修改全局作用域中的变量。

python 名称空间与作用域详情

3.2 nonlocal关键字

修改局部作用域中的变量。

python 名称空间与作用域详情

3.3 注意点

  • 在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。

  • 在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改。

来源:https://zhuanlan.zhihu.com/p/191602133

标签:python,名称空间,作用域
0
投稿

猜你喜欢

  • 一个简单的像素画小工具

    2010-01-01 15:33:00
  • Python数据结构与算法中的栈详解(2)

    2022-02-11 07:00:51
  • ORCAL 临时创建表与删除表

    2023-07-12 19:30:05
  • Python GUI编程 文本弹窗的实例

    2022-08-24 02:07:48
  • JSP安全开发之XSS漏洞详解

    2023-06-13 13:07:24
  • 保护Access 2000数据库的安全

    2008-10-23 13:55:00
  • asp分段插入数据库

    2010-07-02 13:13:00
  • pdo中使用参数化查询sql

    2023-07-20 21:11:21
  • 实例讲解如何利用crontab定时备份MySQL

    2009-01-04 13:06:00
  • Oracle DBA常用语句第1/2页

    2009-08-08 22:38:00
  • Python selenium文件上传方法汇总

    2022-12-01 04:47:29
  • python抓取网站的图片并下载到本地的方法

    2022-05-19 23:45:08
  • Dreamweaver表格布局经验谈

    2007-02-03 11:39:00
  • 如何得到数据库中所有表名 表字段及字段中文描述

    2012-01-05 18:56:44
  • ASP读取XML实例 优酷专辑采集程序 雷锋版

    2011-03-08 11:05:00
  • python将html转成PDF的实现代码(包含中文)

    2023-08-30 18:11:58
  • Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法

    2021-03-12 03:38:27
  • PHP自动生成缩略图函数的源码示例

    2023-06-26 19:13:37
  • Python使用pyodbc访问数据库操作方法详解

    2021-08-02 19:12:29
  • python optparse模块使用实例

    2021-02-03 22:01:36
  • asp之家 网络编程 m.aspxhome.com