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
投稿

猜你喜欢

  • golang实现整型和字节数组之间的转换操作

    2024-02-11 00:13:08
  • python爬虫中PhantomJS加载页面的实例方法

    2021-09-12 09:44:33
  • 关于字体的一些思考

    2008-03-03 12:53:00
  • python递归计算N!的方法

    2021-11-11 21:11:31
  • Vue冷门技巧递归组件实践示例详解

    2024-05-09 15:13:04
  • python+pyqt实现右下角弹出框

    2023-09-07 16:04:22
  • JavaScript使用Promise实现并发请求数限制

    2024-04-16 09:54:44
  • 对python创建及引用动态变量名的示例讲解

    2023-02-03 07:10:49
  • 一键安装mysql5.7及密码策略修改方法

    2024-01-22 05:29:37
  • 详解python数值与字符串高级用法

    2021-08-07 15:05:52
  • Python和perl实现批量对目录下电子书文件重命名的代码分享

    2022-01-28 02:51:48
  • javascript 数组去重复(在线去重工具)

    2024-04-16 09:14:51
  • Python 实操显示数据图表并固定时间长度

    2021-06-08 02:58:57
  • PHP文件操作详解

    2023-11-20 07:44:25
  • 用python爬取租房网站信息的代码

    2022-04-30 07:03:38
  • PHP 计算两个特别大的整数实例代码

    2024-05-11 10:07:33
  • Python代码打开本地.mp4格式文件的方法

    2021-08-27 21:43:04
  • 微信小程序实现触底加载

    2024-04-23 09:30:21
  • python如何快速生成时间戳

    2022-10-26 08:15:41
  • 使用Python实现BT种子和磁力链接的相互转换

    2022-12-21 04:33:25
  • asp之家 网络编程 m.aspxhome.com