Python如何理解和使用名称/命名空间和范围?代码示例解释

什么是名称空间:

命名空间是一个系统, 在Python中, 每个对象都有唯一的名称。对象可以是变量或方法。 Python本身以Python字典的形式维护名称空间。我们来看一个示例, 计算机中的目录文件系统结构。不用说, 一个目录可以有多个目录, 每个目录中都有一个名称相同的文件。但是, 只要指定文件的绝对路径, 就可以将文件定向到该文件。

在实时示例中, 名称空间的作用就像一个姓。在课堂上可能找不到一个"爱丽丝", 但可能会有多个"爱丽丝", 但是当你特别要求"爱丽丝·李"或"爱丽丝·克拉克"(姓)时, 只会有一个(暂时不这样做)。 (对于多个学生来说, 名字和姓氏是一样的)。

同样, Python解释器根据名称空间了解代码中要指向的确切方法或变量。因此, 单词本身的划分几乎没有提供更多信息。它的名称(表示名称, 唯一标识符)+空间(谈论与范围有关的东西)。在这里, 名称可以是任何Python方法或变量, 并且空格取决于尝试访问变量或方法的位置。

 

命名空间的类型:

当Python解释器仅在没有用户定义的模块, 方法, 类等的情况下运行时, 始终会存在诸如print(), id()之类的某些函数, 它们内置在名称空间中。用户创建模块时, 将创建全局名称空间, 稍后创建局部函数将创建局部名称空间。的内置名称空间包含全局名称空间和全局名称空间包含本地名称空间.

 

命名空间的生命周期:

名称空间的生存期取决于对象的范围, 如果对象的范围结束, 则该命名空间的生存期将结束。因此, 不可能从外部名称空间访问内部名称空间的对象。

例子:

# 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

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

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

# 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 defined

更多Python开发相关内容请参考:lsbin - IT开发技术https://www.lsbin.com/

参考更多Python内容:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值