Python进阶(一)名字空间 | 超详细名字空间解析 内置 全局 局部 调试查看


在Python中,名字空间(Namespace)是一个用于存储变量名称和它们对应的对象值的容器。名字空间可以看作是一个映射,将变量名映射到相应的对象值。比如申明一个变量a=1,那么在名字空间字典中就会增加一个映射

‘a’ : ‘1’

Python中有几种不同类型的名字空间,主要包括以下几类:

  1. 内置名字空间(Built-in Namespace): 包含Python解释器内置的函数和对象,例如print()len()。这个名字空间在解释器启动时就被创建,是全局范围的,所以大家可以直观感受到print()非常方便,不需要任何的导入import。

  2. 全局名字空间(Global Namespace): 包含在我们的程序文件级别定义的变量和函数。这个名字空间在模块(module)被导入或程序执行时创建,是模块级别的。

  3. 局部名字空间(Local Namespace): 包含在函数内部定义的变量。这个名字空间在函数调用时创建,包含了函数内部的变量,只在函数执行期间存在,函数执行完之后就销毁。

  4. 类名字空间(Class Namespace): 包含类定义中的变量。每个类都有一个类名字空间,用于存储类的变量和方法。

名字空间之间存在层次关系,被称为名字空间链(Namespace Hierarchy)。当使用变量时,解释器会按照一定的顺序搜索名字空间链,以查找变量对应的对象。

名字空间的一个关键特性是它们提供了作用域(Scope)。作用域定义了变量的可见性和生命周期。比如在一个函数内申明的某个变量,在函数外就不能随意访问了,在一个作用域内定义的变量在该作用域内可见,超出作用域范围后就不再可访问。

对每一部分我们聚一些例子

1 内置名字空间

在任意文件内输入

# 内置名字空间
print("Built-in function:", len("example"))

我们测试了print,和len这两个内置名字空间,这两个函数我们没有提前申明,是内置的

len内置函数可以输出字符串的长度

最后输出

Built-in function: 7

内置的往往都是全局的

2 全局名字空间

# 全局名字空间
global_variable = 10

def my_function():
    # 函数内可以访问全局名字空间
    print("Global variable inside function:", global_variable)

my_function()#测试能否正常访问

输出

Global variable inside function:10

在文件开头我们申明了global_variable=10,则在全局名字空间内增添了一个映射,无论是在函数内还是在函数外都可以正常访问全局名字空间的映射

3 局部名字空间

任意文件内输入

def my_function():
    # 局部名字空间
    local_variable = 5
    print("Local variable inside function:", local_variable)

my_function()

# 尝试访问局部变量会引发 NameError
print("Trying to access local variable outside function:", local_variable)

输出

Local variable inside function: 5
...
NameError: name 'local_variable' is not defined

可见在函数内访问则可以正常输出,函数外访问则会导致引发 NameError

4 类名字空间

class MyClass:
    class_variable = "Class Variable" # 类变量属于类的名字空间,每一个实例都可以访问

    def __init__(self, instance_variable):
        # 实例变量属于实例的名字空间,每一个实例只能访问自己的实例变量
        self.instance_variable = instance_variable

    def print_variables(self):
        print("Class Variable:", MyClass.class_variable)
        print("Instance Variable:", self.instance_variable)

# 创建类的实例
obj1 = MyClass("Instance Value")
obj1.print_variables()
obj2=MyClass("Instance Value2")
obj2.print_variables()

输出

Class Variable: Class Variable
Instance Variable: Instance Value
Class Variable: Class Variable
Instance Variable: Instance Value2

类变量属于类的名字空间,每一个实例都可以访问

实例变量属于实例的名字空间,每一个实例只能访问自己的实例变量,用self.区分

5 调试查看名字空间

有时候我们需要查看名字空间,方便进行调试

通过locals()函数和global()函数可以获得局部和全局名字空间字典

5.1 查看局部名字空间

def my_function():
    local_variable = 5
    print("Local Namespace:", locals())

my_function()

输出

Local Namespace: {'local_variable': 5}

5.2 查看全局名字空间

global_variable = 10

def my_function():
    print("Global Namespace:", globals())

my_function()

输出

Global Namespace: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020D60796CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'f:\\BaiduSyncdisk\\Code\\数据处理\\名字空间.py', '__cached__': 
None, 'global_variable': 10, 'my_function': <function my_function at 0x0000020D60BB9C10>}

可以看到输出较为复杂,因为我们在一开始说过,内置的往往都是全局的,所以我们可以看到除了我们自己申明的全局名字如global_variable,my_function,还有很多没申明的,比如name,比如有获得文件目录的 _ _ file _ _全局变量,这些都是内置的

总结来看,Python的名字空间是一个组织和管理变量的机制,确保在程序中能够正确找到和使用变量。

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python进阶之路》是一本非常值得推荐的Python进阶书籍。这本书由一位经验丰富的Python大牛所著,作者拥有过20年的Python开发经验。这本书涵盖了许多Python进阶知识点,如元编程、动态属性、属性描述符、异步处理等。书中详细列举了这些高级特性的使用方法,并讲解得非常透彻。如果你想从入门迈向进阶,这本书是必备的参考资料。 另外,《Python Cookbook》也是一本非常受欢迎的Python进阶书籍。这本书总结了大量精妙的编程技巧和实用的技术,无论你是Python新手还是老手,都会从中收获很多。豆瓣评分高达9.2分,可见其受到广大读者的认可。 除了以上两本书,《Python进阶技巧》也是一本非常值得一读的进阶书籍。这本书的作者将许多代码简化成了一行,展现了Python的高级技巧。虽然有些地方可能看起来有些夸张,但它确实帮助你了解Python的特性和一些不错的功能。而且,在关键时刻,这种技巧还可以让你轻松搞定其他人需要十几行代码才能完成的任务。对于想要进阶的同学来说,这本书的阅读是非常适合的。 总而言之,《Python进阶之路》、《Python Cookbook》和《Python进阶技巧》都是非常优秀的Python进阶书籍,适合想要深入学习Python的读者。 : 引用自《Python进阶之路》 : 引用自《Python Cookbook》 : 引用自《Python进阶技巧》

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值