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

这篇具有很好参考价值的文章主要介绍了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的名字空间是一个组织和管理变量的机制,确保在程序中能够正确找到和使用变量。文章来源地址https://www.toymoban.com/news/detail-807963.html

到了这里,关于Python进阶(一)名字空间 | 超详细名字空间解析 内置 全局 局部 调试查看的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python图像增强之直方图均衡化(全局直方图均衡、局部直方图均衡)

    图像增强是有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。 图像增强通常划分

    2024年02月13日
    浏览(38)
  • Python入门【变量的作用域(全局变量和局部变量)、参数的传递、浅拷贝和深拷贝、参数的几种类型 】(十一)

     👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错

    2024年02月15日
    浏览(51)
  • Python学习笔记(四):函数的定义、函数的返回值、None类型、函数说明文档、函数的嵌套调用、局部变量、全局变量、global关键字

    目录 一、函数介绍 1. 函数是: 2. 使用函数的好处是: 二、函数的定义: 三、函数的参数 1.传入参数的功能是: 2.函数的传入参数 - 传参定义 3.注意事项: 4.练习:测量体温 四、函数的返回值 1.函数返回值的定义 2.None类型 五、函数说明文档 六、函数的嵌套调用 七、变量的

    2024年02月05日
    浏览(67)
  • 论文阅读—2023.7.13:遥感图像语义分割空间全局上下文信息网络(主要为unet网络以及改unet)附加个人理解与代码解析

    前期看的文章大部分都是深度学习原理含量多一点,一直在纠结怎么改模型,论文看的很吃力,看一篇忘一篇,总感觉摸不到方向。想到自己是遥感专业,所以还是回归遥感影像去谈深度学习,回归问题,再想着用什么方法解决问题。 1、易丢失空间信息 在 Decoder 阶段输出多

    2024年02月16日
    浏览(46)
  • 图像哈希:全局+局部提取特征

    文章信息 作者:梁小平,唐振军 期刊:ACM Trans. Multimedia Comput. Commun. Appl(三区) 题目:Robust Hashing via Global and Local Invariant Features for Image Copy Detection 目的、实验步骤及结论 目的:通过全局和局部提取特征来生成最终图像的哈希值。 实验步骤: 数据预处理:双线性插值(5

    2024年04月27日
    浏览(43)
  • K8S集群管理:用名字空间分隔系统资源

    Kubernetes 的名字空间并不是一个实体对象,只是一个逻辑上的概念。它可以把集群切分成一个个彼此独立的区域,然后我们把对象放到这些区域里,就实现了类似容器技术里 namespace 的隔离效果,应用只能在自己的名字空间里分配资源和运行,不会干扰到其他名字空间里的应用

    2024年02月16日
    浏览(40)
  • Python空间分析| 01 利用Python计算全局莫兰指数(Global Moran‘s I)

    空间自相关(spatial autocorrelation)是指一些变量在同一个分布区内的观测数据之间潜在的相互依赖性。Tobler(1970)曾指出“地理学第一定律:任何东西与别的东西之间都是相关的,但近处的东西比远处的东西相关性更强” 全局莫兰指数(Global Moran’s I)是最常用的空间自相关指

    2024年01月21日
    浏览(36)
  • C语言——局部和全局变量

    局部变量 定义在函数内部的变量称为局部变量(Local Variable) 局部变量的作用域(作用范围)仅限于函数内部, 离开该函数后是无效的 离开该函数后,局部变量自动释放 示例代码: 全局变量 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程

    2024年02月10日
    浏览(40)
  • Golang 局部变量、全局变量 声明

    四种声明方式 + 多变量声明: 全局变量的声明和局部变量的声明方式一、二、三 相同; 但是不能使用局部变量声明方式四 (:=) 来声明全局变量。

    2024年02月13日
    浏览(37)
  • 全局变量、局部变量和静态变量

    定义:在函数外定义的变量是全局变量,全局变量可以为本文件中其它函数所共用,它的有效范围从定义变量的位置开始到本源文件结束。 设全局变量的作用:增加了函数间数据联系的渠道; 不必要时不要使用全局变量,因为:a) 全局变量在程序的全部执行过程中都占用存

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包