当前位置:首页 > 实用技巧 >

全局定义必须在什么模块中定义(模块的声明包括模块名字)

来源:原点资讯(www.yd166.com)时间:2023-11-28 06:35:31作者:YD166手机阅读>>

什么是命名空间?

命名空间是一个系统,它对Python中的每个对象都有一个唯一的名称。对象可能是变量或方法。

Python本身以Python字典的形式维护名称空间。

在类似的行中,Python解释器可以理解代码中的确切方法或变量,这取决于名称空间。

名称可能是任何Python方法或变量,空间取决于试图访问变量或方法的位置。

全局定义必须在什么模块中定义,模块的声明包括模块名字(1)

命名空间的类型:

  • 内置:主要用来存放内置函数、异常等,比如:abs 函数、BaseException 异常。
  • 全局:指在模块中定义的名称,比如:类、函数等。
  • 局部:指在函数中定义的名称,比如:函数的参数、在函数中定义的变量等。

当Python解释器只在没有和用户定义的模块、方法、类等情况下运行时,在名称空间中构建(如print()、id())这些函数。当用户创建一个模块时,将创建一个全局命名空间。

内置命名空间包含全局命名空间;全局命名空间包含局部命名空间.

全局定义必须在什么模块中定义,模块的声明包括模块名字(2)


命名空间的生存期:

命名空间的生存期取决于对象的作用域,不可能从外部命名空间访问内部命名空间的对象。

  • 内置:在 Python 解释器启动时创建,退出时销毁。
  • 全局:在模块定义被读入时创建,在 Python 解释器退出时销毁。
  • 局部:对于类,在 Python 解释器读到类定义时创建,类定义结束后销毁;对于函数,在函数被调用时创建,函数执行完成或出现未捕获的异常时销毁。

例子:

# var1 is in the global namespace var1 = 5 def some_func(): # var2 is in the local namespace var2 = 6 def some_inner_func(): # var3 is in the nested local # namespace var3 = 7

如下图所示,相同的对象名称可以出现在多个名称空间中,因为同一名称空间之间的隔离是由名称空间维护的。

全局定义必须在什么模块中定义,模块的声明包括模块名字(3)

但在某些情况下,您可能只对更新或处理全局变量感兴趣,如下面的示例所示,应该将其显式标记为全局变量和更新或处理。

# Python program processing # global variable count = 5 def some_method(): global count count = count 1 print(count) some_method()

产出:

6

Python中的对象范围:

范围是指可从其中访问特定Python对象的编码区域。

不能从代码的任何地方访问任何特定的对象,对象的范围必须允许访问。

例1:

# Python program showing # a scope of object def some_func(): print("Inside some_func") def some_inner_func(): var = 10 print("Inside inner function, value of var:",var) some_inner_func() print("Try printing var from outer function: ",var) some_func()

产出:

Inside some_func Inside inner function, value of var: 10 Traceback (most recent call last): File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 8, in some_func() File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 7, in some_func print("Try printing var from outer function: ",var) NameError: name 'var' is not defined2 作用域

2.1 概念

作用域是 Python 程序可以直接访问命名空间的文本区域(代码区域),名称的非限定引用会尝试在命名空间中查找名称,作用域是静态的。

2.2 种类

Python 有如下四种作用域:

  • 局部:最先被搜索的最内部作用域,包含局部名称。
  • 嵌套:根据嵌套层次由内向外搜索,包含非全局、非局部名称。
  • 全局:倒数第二个被搜索,包含当前模块的全局名称。
  • 内建:最后被搜索,包含内置名称的命名空间。

作用域的搜索顺序:从局部——嵌套——全局——内建依次进行。

Python由内向外去搜索名字 ,再通过具体代码来对作用域作进一步了解,如下所示:

# 全局作用域 g = 1 def outer(): # 嵌套作用域 e = 2 def inner(): # 局部作用域 i = 3

2.3 global & nonlocal

我们先来看一下全局变量与局部变量。

  • 全局变量:定义在函数外部的变量。
  • 局部变量:定义在函数内部的变量。

全局变量可以在整个程序范围内进行访问。

而局部变量只能在函数内部访问。

通过具体示例看一下:

# 全局变量 d = 0 def sub(a, b): # d 在这为局部变量 d = a - b print('函数内 : ', d) sub(9, 1) print('函数外 : ', d)

执行结果:

函数内 : 8 函数外 : 0

利用 global 和 nonlocal 关键字修改外部作用域的变量。将上面示例中 sub() 函数中的 d 变量修改为全局变量,则需使用 global 关键字,示例如下所示:

# 全局变量 d = 0 def sub(a, b): # 使用 global 声明 d 为全局变量 global d d = a - b print('函数内 : ', d) sub(9, 1) print('函数外 : ', d)

执行结果:

函数内 : 8 函数外 : 8

如果需要修改嵌套作用域中的变量,则需用到 nonlocal 关键字。

2.3.1 不使用 nonlocal

def outer(): d = 1 def inner(): d = 2 print('inner:', d) inner() print('outer:', d) outer()

执行结果:

inner: 2 outer: 1

2.3.2 使用 nonlocal

def outer(): d = 1 def inner(): nonlocal d d = 2 print('inner:', d) inner() print('outer:', d) outer()

执行结果:

inner: 2 outer: 2

栏目热文

修改功能区的命令有什么(命令栏怎么没有不在功能区的命令)

修改功能区的命令有什么(命令栏怎么没有不在功能区的命令)

大家好,我是一空,今天跟大家分享的是行列的行高和列宽如何设置,这节课内容比较简单,也需要多实操才行。1.拖动调整拖动行、...

2023-11-28 07:10:11查看全文 >>

自定义功能区所有命令(ppt自定义功能区在哪儿)

自定义功能区所有命令(ppt自定义功能区在哪儿)

作用:使自定义函数、功能等在每个工作表都能使用(跨表使用),如同Excel自带功能一样丝滑当我们有段VBA代码放到VBE...

2023-11-28 07:03:44查看全文 >>

功能区的命令能删除吗(不在功能区中的命令不见了)

功能区的命令能删除吗(不在功能区中的命令不见了)

工作中,有时候,需要录入数据表格,我们想制作一个窗体,来快速的录入对应信息这个是Excel自带的,无需VBA代码就能打开...

2023-11-28 06:56:50查看全文 >>

重新设置模块空间界限的命令(添加的模块超过使用数量限制)

重新设置模块空间界限的命令(添加的模块超过使用数量限制)

cad图形界限能限定画图区域的界限,在你超过该界限的位置时无法绘图,同时它还有较强的计算能力,能高分辨率的显示终端,联在...

2023-11-28 07:01:47查看全文 >>

引用选项卡下的功能(引用在哪个工具栏里)

引用选项卡下的功能(引用在哪个工具栏里)

五.引用选项卡在Word2016版本中,设有这样一个选项卡,它可以自动添加目录还可以是文档看起来更加清晰明了使我们能更好...

2023-11-28 07:15:59查看全文 >>

在插入选项中有哪些命令(插入选项卡中的命令有什么)

在插入选项中有哪些命令(插入选项卡中的命令有什么)

选项按钮在一定的场景里面会经常出现,例如问卷调查,在表格里面需要设好一系列的问题,并且给出对应的选项。下面来介绍一下如何...

2023-11-28 06:45:05查看全文 >>

热带季风气候在东南亚的哪些地区(热带季风气候分布在东南亚的哪里)

热带季风气候在东南亚的哪些地区(热带季风气候分布在东南亚的哪里)

地球上不同的地区分布着不同的气候类型,世界上主要的气候类型包括热带雨林气候、热带草原气候、热带沙漠气候、热带季风气候、亚...

2023-11-28 07:05:54查看全文 >>

东南亚的热带季风气候形成原因(东南亚热带季风气候形成原因)

东南亚的热带季风气候形成原因(东南亚热带季风气候形成原因)

在印度分布着大面积的热带季风气候区。热带季风气候的特点是全年高温,降水分为旱、雨两季,旱季降水少,雨季降水多。热带季风气...

2023-11-28 06:33:51查看全文 >>

东南亚气候的主要特征(欧洲气候的主要特征)

东南亚气候的主要特征(欧洲气候的主要特征)

东南亚地区地处热带,气温常年较高,加上热带雨林的动植物给人留下的鲜明印象,很多人认为东南亚是属于热带雨林气候。其实不尽然...

2023-11-28 07:16:27查看全文 >>

东南亚地区的热带季风气候(东南亚全是热带季风气候吗)

东南亚地区的热带季风气候(东南亚全是热带季风气候吗)

初中地理:七年级下册,第七章我们邻近的地区和国家考点1:日本(1)日本的自然地理环境日本是个岛国,海岸线曲折,多优良港湾...

2023-11-28 07:04:23查看全文 >>

文档排行