Python中的命名空间和范围

什么是命名空间

命名空间是一个系统,它为Python中的每个对象提供唯一的名称。对象可以是变量或方法。Python本身以Python字典的形式维护命名空间。让我们来看一个例子,计算机中的目录文件系统结构。不用说,一个人可以拥有多个目录,每个目录中都有一个具有相同名称的文件。但是,人们可以通过指定文件的绝对路径来定向文件。
实时示例,命名空间的作用就像一个姓氏。有人可能在课堂上找不到一个“爱丽丝”可能会有多个“爱丽丝”,但当你特别要求“爱丽丝李”或“爱丽丝克拉克”(带姓氏)时,只会有一个(时间不是’)想到多名学生的名字和姓氏都是一样的)。

在类似的路线上,Python解释器理解在代码中试图指向的确切方法或变量,具体取决于命名空间。因此,单词本身的划分提供了更多的信息。它的名称(表示名称,唯一标识符)+ 空格(表示与范围相关的内容)。这里,名称可能是任何Python方法或变量,空间取决于尝试访问变量或方法的位置。

命名空间的类型

当Python解释器完全没有和用户定义的模块,方法,类等运行时,一些函数如print(),id()总是存在,这些函数是在命名空间中构建的。当用户创建模块时,将创建全局命名空间,稍后创建本地函数将创建本地命名空间。在内置的命名空间包含全局命名空间和全局命名空间包含局部命名空间。

命名空间的生命周期

命名空间的生命周期取决于对象的范围,如果对象的范围结束,则该命名空间的生命周期结束。因此,无法从外部命名空间访问内部命名空间的对象。

例:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
# 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学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
# Python program processing 
# global variable 

count = 5
def some_method(): 
    global count 
    count = count + 1
    print(count) 
some_method() 
输出:
6

Python中对象的范围:

范围是指可从中访问特定Python对象的编码区域。因此,无法从代码中的任何位置访问任何特定对象,访问必须由对象的范围允许。

例1:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
# Python program showing 
# a scope of object 

def some_func(): 
    print("You are welcome to some_func") 
    print(var) 
some_func() 
输出:
You are welcome to some_func

Traceback (most recent call last):
  File "/home/ab866b415abb0279f2e93037ea5d6de5.py", line 4, in 
    some_func()
  File "/home/ab866b415abb0279f2e93037ea5d6de5.py", line 3, in some_func
    print(var)
NameError: name 'var' is not defined

从上面的输出中可以看出,函数some_func()在main的范围内,但var在main的范围内是不可用的。类似地,在内部函数的情况下,外部函数不具有内部局部变量的可访问性,内部局部变量对于内部函数是局部的并且不在外部函数的范围内。让我们举一个例子来了解相同的细节:

示例2:

# 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值