第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)

什么是命名空间:

命名空间是一个为 Python 中的每个对象都有唯一名称的系统。对象可能是变量或方法。Python 本身以 Python 字典的形式维护一个命名空间。让我们看一个例子,计算机中的目录文件系统结构。不用说,可以有多个目录,每个目录中都有一个同名的文件。但是,只要指定文件的绝对路径,就可以根据需要定向到该文件。 
实时的例子,命名空间的作用就像一个姓氏。人们可能在班级中找不到一个“Alice”,可能有多个“Alice”,但当你特别要求“Alice Lee”或“Alice Clark”(带有姓氏)时,只会有一个(暂时不要)不要认为多个学生的名字和姓氏都相同)。
类似地,Python 解释器根据命名空间来理解尝试在代码中指向的确切方法或变量。因此,单词本身的划分提供了更多的信息。它的名称(表示名称,唯一标识符)+空间(表示与范围相关的内容)。这里,名称可以是任何 Python 方法或变量,并且空间取决于尝试访问变量或方法的位置。
 

命名空间的类型:
 

当Python解释器单独运行而没有任何用户定义的模块、方法、类等时。一些函数如print()、id()始终存在,这些是内置的命名空间。当用户创建模块时,会创建全局命名空间,稍后创建本地函数会创建本地命名空间。内置命名空间包含全局命名空间,全局命名空间包含本地命名空间
 

第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)_第1张图片 第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)_第2张图片

命名空间的生命周期:
 

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

例子: 

  • Python3
    # var1 在全局命名空间中
    var1 = 5
    
    def some_func():
    
    	# var2 在局部命名空间中
    	var2 = 6
    
    	def some_inner_func():
    
    		# var3 在嵌套的局部命名空间中
    		var3 = 7
    

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

第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)_第3张图片

但在某些情况下,人们可能只对更新或处理全局变量感兴趣,如以下示例所示,应将其显式标记为全局变量并进行更新或处理。请注意,“count = count +1”行引用了全局变量,因此使用了全局变量,但请将其与写入“count = 1”的同一行进行比较。那么根据作用域规则,绝对需要“全局计数”行。

  • Python3
    # Python程序处理
    # 全局变量
    
    count = 5  # 定义全局变量count并赋值为5
    
    def some_method():
    	global count  # 使用global关键字声明要在函数中使用的全局变量count
    	count = count + 1  # 增加count的值
    	print(count)
    
    some_method()  # 调用函数some_method(),并打印count的值
    
    

    这段代码定义了一个全局变量count并赋值为5。然后,定义了一个名为some_method的函数,在函数内部使用global关键字声明要在函数中使用的全局变量count,并对其进行加1操作。最后,调用函数some_method(),打印count的值。

输出: 

6

Python 中对象的范围:
 

范围是指可访问特定 Python 对象的编码区域。因此,人们无法从代码的任何位置访问任何特定对象,访问必须得到对象范围的允许。
让我们举个例子来详细了解一下: 
 

示例1: 

  • Python3
    # Python程序展示
    # 对象的作用域
    
    def some_func():
    	print("在some_func函数内部")
    	def some_inner_func():
    		var = 10
    		print("在内部函数中,var的值为:", var)
    	some_inner_func()
    	print("尝试从外部函数打印var: ", var)
    some_func()
    

    这段代码定义了一个名为some_func的函数,在函数内部定义了另一个名为some_inner_func的函数。在some_inner_func内部,定义了一个局部变量var并赋值为10,然后打印了var的值。但是,在some_func函数的外部尝试打印var时,会引发NameError异常,因为var在外部函数的作用域之外不可见。

输出: 

在some_func函数内部
在内部函数中,var的值为: 10
Traceback (most recent call last):
  File "your_script.py", line 8, in 
    some_func()
  File "your_script.py", line 6, in some_func
    print("尝试从外部函数打印var: ", var)
NameError: name 'var' is not defined

这是代码的执行输出。首先,调用some_func函数,它打印了"在some_func函数内部"。然后,在some_func内部调用了some_inner_func,它打印了"在内部函数中,var的值为: 10"。

但是,在尝试从外部函数some_func打印var时,引发了NameError异常,因为var不在外部函数的作用域内可见。所以,最后一行代码无法执行。

你可能感兴趣的:(Python,python,java,前端,开发语言,numpy,学习,pyqt)