python 名称空间与作用域详情

 更新时间:2022年01月24日 10:45:09   作者:Python 学习者  
这篇文章主要介绍了python 名称空间与作用域详情,函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。

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

一、名称空间

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

1.1 内置名称空间

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

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

1.2 全局名称空间

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

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

1.3 局部名称空间

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

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

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

1.4 加载顺序

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

1.5 查找顺序

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

二、作用域

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

2.1 全局作用域

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

2.2 局部作用域

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

2.3 注意点

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

2.4 函数对象+作用域应用

三、补充知识点

3.1 global关键字

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

3.2 nonlocal关键字

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

3.3 注意点

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

到此这篇关于python 名称空间与作用域详情的文章就介绍到这了,更多相关python 名称空间与作用域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现提取给定网页内的所有链接

    Python实现提取给定网页内的所有链接

    这篇文章主要和大家分享一个实用的Python脚本,可以实现从给定的网页中检索所有链接,并将其保存为txt文件,需要的小伙伴可以收藏一下
    2023-05-05
  • 使用 Python 处理 JSON 格式的数据

    使用 Python 处理 JSON 格式的数据

    JSON 是一个很好的选择。如果你对 Python 有所了解,就更加事半功倍了。下面就来介绍一下如何使用 Python 处理 JSON 数据。感兴趣的朋友跟随小编一起看看吧
    2019-07-07
  • TensorFlow使用Graph的基本操作的实现

    TensorFlow使用Graph的基本操作的实现

    这篇文章主要介绍了TensorFlow使用Graph的基本操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python class类@staticmethod及@classmethod区别浅析

    Python class类@staticmethod及@classmethod区别浅析

    这篇文章主要为大家介绍了Python class类@staticmethod及@classmethod区别浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • python 读写中文json的实例详解

    python 读写中文json的实例详解

    这篇文章主要介绍了 python 读写中文json的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的内容,需要的朋友可以参考下
    2017-10-10
  • 基于python的Tkinter实现一个简易计算器

    基于python的Tkinter实现一个简易计算器

    这篇文章主要介绍了基于python的Tkinter实现一个简易计算器的相关资料,还为大家分享了仅用用50行Python代码实现的简易计算器,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 用Python输出一个杨辉三角的例子

    用Python输出一个杨辉三角的例子

    这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下
    2014-06-06
  • Python中线程的MQ消息队列实现以及消息队列的优点解析

    Python中线程的MQ消息队列实现以及消息队列的优点解析

    消息队列(MQ,Message Queue)在消息数据传输中的保存作用为数据通信提供了保障和实时处理上的便利,这里我们就来看一下Python中线程的MQ消息队列实现以及消息队列的优点解析
    2016-06-06
  • Python随机值生成的常用方法总结

    Python随机值生成的常用方法总结

    这篇文章主要为大家详细介绍了Python中随机值生成的一些常用方法,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以了解一下
    2022-10-10
  • python多重继承实例

    python多重继承实例

    这篇文章主要介绍了python多重继承实例,简单实用易于理解,需要的朋友可以参考下
    2014-10-10

最新评论