我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python3命名空间和作用域是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python3命名空间和作用域是什么

这篇文章主要讲解了“Python3命名空间和作用域是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3命名空间和作用域是什么”吧!

命名空间

命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。

命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。
Python3命名空间和作用域是什么
一般有三种命名空间:

内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
Python3命名空间和作用域是什么
命名空间查找顺序:

假设我们要使用变量 runoob,则 Python 的查找顺序为:局部的命名空间去 -> 全局命名空间 -> 内置命名空间。

如果找不到变量 runoob,它将放弃查找并引发一个 NameError 异常:

NameError: name 'runoob' is not defined。

命名空间的生命周期:

命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。

因此,我们无法从外部命名空间访问内部命名空间的对象。

实例# var1 是全局名称var1 = 5def some_func():       # var2 是局部名称    var2 = 6    def some_inner_func():           # var3 是内嵌的局部名称        var3 = 7

如下图所示,相同的对象名称可以存在于多个命名空间中。
Python3命名空间和作用域是什么

作用域

作用域就是一个 Python 程序可以直接访问命名空间的正文区域。

在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

有四种作用域:

L(Local):最内层,包含局部变量,比如一个函数/方法内部。
E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
G(Global):当前脚本的最外层,比如当前模块的全局变量。
B(Built-in): 包含了内建的变量/关键字等。,最后被搜索
规则顺序: L –> E –> G –>gt; B。

在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
Python3命名空间和作用域是什么

g_count = 0  # 全局作用域def outer():    o_count = 1  # 闭包函数外的函数中    def inner():        i_count = 2  # 局部作用域

内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:

>>> import builtins>>> dir(builtins)

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:

>>> if True:...  msg = 'I am from Runoob'... >>> msg'I am from Runoob'>>>

实例中 msg 变量定义在 if 语句块中,但外部还是可以访问的。

如果将 msg 定义在函数中,则它就是局部变量,外部不能访问:

>>> def test():...     msg_inner = 'I am from Runoob'... >>> msg_innerTraceback (most recent call last):  File "", line 1, inNameError: name 'msg_inner' is not defined>>>

从报错的信息上看,说明了 msg_inner 未定义,无法使用,因为它是局部变量,只有在函数内可以使用。

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

实例(Python 3.0+)#!/usr/bin/python3 total = 0 # 这是一个全局变量# 可写函数说明def sum( arg1, arg2 ):    #返回2个参数的和."    total = arg1 + arg2 # total在这里是局部变量.    print ("函数内是局部变量 : ", total)    return total #调用sum函数sum( 10, 20 )print ("函数外是全局变量 : ", total)

以上实例输出结果:

函数内是局部变量 :  30函数外是全局变量 :  0

global 和 nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num:

实例(Python 3.0+)#!/usr/bin/python3 num = 1def fun1():    global num  # 需要使用 global 关键字声明    print(num)     num = 123    print(num)fun1()print(num)

以上实例输出结果:

1123123

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

实例(Python 3.0+)#!/usr/bin/python3 def outer():    num = 10    def inner():        nonlocal num   # nonlocal关键字声明        num = 100        print(num)    inner()    print(num)outer()

以上实例输出结果:

100100

另外有一种特殊情况,假设下面这段代码被运行:

实例(Python 3.0+)#!/usr/bin/python3 a = 10def test():    a = a + 1    print(a)test()

以上程序执行,报错信息如下:

Traceback (most recent call last):  File "test.py", line 7, intest()  File "test.py", line 5, in test    a = a + 1UnboundLocalError: local variable 'a' referenced before assignment

错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。

修改 a 为全局变量,通过函数参数传递,可以正常执行输出结果为:

实例(Python 3.0+)#!/usr/bin/python3 a = 10def test(a):    a = a + 1    print(a)test(a)

执行输出结果为:

11

感谢各位的阅读,以上就是“Python3命名空间和作用域是什么”的内容了,经过本文的学习后,相信大家对Python3命名空间和作用域是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python3命名空间和作用域是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python3命名空间和作用域是什么

这篇文章主要讲解了“Python3命名空间和作用域是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3命名空间和作用域是什么”吧!命名空间命名空间(Namespace)是从名称
2023-06-02

Python函数命名空间和作用域是什么

这篇文章主要介绍Python函数命名空间和作用域是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.Local作用域a = 100def func5(): b = 50 a = 99 print
2023-06-29

命名空间和作用域

一、命名空间一、命名空间的分类:1、内置命名空间——python解释器:python解释器启动就可以使用的名字存储在内置内存空间;内置的名字在启动解释器的时候就被加载进内存,如input()、print()等等。2、全局命名空间——自己写的
2023-01-31

Python 作用域和命名空间

在介绍类之前,我首先要告诉你一些Python的作用域规则。类定义对命名空间有一些巧妙的技巧,你需要知道作用域和命名空间如何工作才能完全理解正在发生的事情。顺便说一下,关于这个主题的知识对任何高级Python程序员都很有用。让我们从一些定义开
2023-01-31

php命名空间的作用是什么

PHP命名空间组织代码,避免名称冲突,提高可读性和模块化开发。它允许将相关代码分组到逻辑单元中,通过可见性控制和嵌套命名空间提供结构和灵活性。通过使用名称空间别名和自动加载功能,开发人员可以简化命名空间引用并确保代码的有效加载。命名空间的最佳实践包括遵循一致的命名约定、适当地分组代码、谨慎使用别名以及利用自动加载机制。
php命名空间的作用是什么
2024-04-13

C++命名空间的作用是什么

C++命名空间的作用是解决命名冲突的问题。在C++中,可以使用命名空间将一组相关的变量、函数、类等封装起来,从而避免与其他代码中的同名元素发生冲突。命名空间可以通过以下方式定义和使用:1. 定义命名空间:```namespace MyNam
2023-08-18

php命名空间的作用是什么

PHP命名空间的作用是避免命名冲突和提高代码的可读性。在PHP中,命名空间允许我们在代码中定义一个独特的标识符前缀,以避免与同样标识符的其他代码发生冲突。通过将相关的类、函数、常量等组织在命名空间中,我们可以区分不同的代码模块,提高代码的可
2023-10-12

C#命名空间的作用是什么

当在C#中编写代码时,可以使用命名空间来将相关的类、接口和其他类型组织在一起。命名空间是一个逻辑上的容器,可用于避免命名冲突和提供更好的结构化代码组织。通过使用命名空间,可以将代码分为不同的逻辑单元,并对其进行命名以反映其功能或特定领域。
C#命名空间的作用是什么
2024-04-09

Python命名空间、作用域和装饰器怎么使用

今天小编给大家分享一下Python命名空间、作用域和装饰器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、名称空间
2023-06-30

域名和空间注册步骤是什么

1. 选择域名和空间提供商:根据自己需求选择合适的域名和空间提供商,可以通过搜索引擎、口碑推荐等方式寻找。2. 查询域名是否可用:在域名提供商的网站上输入所需的域名,查询是否可用。如果已经被注册,需要选择另一个域名。3. 注册域名:选择可用
2023-06-07

什么是VB.NET命名空间

这篇文章主要为大家展示了“什么是VB.NET命名空间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“什么是VB.NET命名空间”这篇文章吧。对于命名组织在程序集中定义的对象你有深入的了解吗?程序集
2023-06-17

ADO.NET常用命名空间是什么

这期内容当中小编将会给大家带来有关ADO.NET常用命名空间是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。命名空间(NameSpace)记录了对象的名称与所在的路径。使用ADO.NET中的对象时,必
2023-06-17

购买域名和空间的区别是什么

购买域名和空间是建立网站的两个基本步骤,它们之间的区别如下:1、域名是网站的名称,空间是网站的存储空间。域名是网站的唯一标识符,用于让用户找到您的网站;空间则是您存储网站文件、图片、数据库等内容的地方。2、域名是必需的,而空间是可选的。如果
2023-03-21

C#中的命名空间有什么作用

C#中的命名空间主要有以下几个作用:避免命名冲突:命名空间可以帮助组织和管理代码,避免不同模块或库中相同名称的类、接口、变量等出现冲突。管理和组织代码:通过将相关的类、接口、方法等放在同一个命名空间下,可以更好地组织和管理代码,提高代码的
C#中的命名空间有什么作用
2024-04-09

Python中的命名空间、作用域以及lo

最近一直看一本python经典教材——《Python学习手册》,因为之前都是突击学的,也没有仔细看一些经典教材,所以感觉自己的基础掌握的还不是很好,虽然网络上资源多,但我觉得还是有必要买本教材来认真的读一读,底层基础决定上层建筑嘛,基础打牢
2023-01-31

SAE空间域名绑定和域名跳转的方法是什么

本篇内容介绍了“SAE空间域名绑定和域名跳转的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!域名绑定1、新浪SAE空间支持绑定独立
2023-06-10

C++标准库和std命名空间是什么

这篇文章主要介绍“C++标准库和std命名空间是什么”,在日常操作中,相信很多人在C++标准库和std命名空间是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++标准库和std命名空间是什么”的疑惑有所
2023-06-03

域名空间和服务器的区别是什么

域名空间和服务器都与网站有关,但它们的作用不同。域名空间是一种用于管理域名的系统,它将域名映射到IP地址,以便用户可以使用域名来访问网站。域名空间管理者负责维护域名数据库,并确保每个域名都有唯一的IP地址。服务器是一种计算机系统,用于提供网
2023-06-03

Python全局命名空间和局部命名空间有什么区别

Python中的全局命名空间和局部命名空间都是用来存储变量和函数的地方,但它们之间有一些重要的区别。全局命名空间是在整个程序中都可访问的命名空间,包括在函数外部定义的变量和函数。而局部命名空间是在函数内部定义的,只能在该函数内部访问。全局命
Python全局命名空间和局部命名空间有什么区别
2024-03-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录