Python 入门简明教程
1. 1. 与 Python 的第一次亲密接触-写给初学者 2. 2. Python 语法关键字 3. 3. Python 的注释和语法 4. 4. Python 基本数据类型 5. 5. Python 输入输出 6. 6. Python 运算符 7. 7. Python 变量 8. 8. Python 命名空间和变量生存范围 9. 9. Python 逻辑判断 10. 10. Python For 循环语法 11. 11. Python While 循环语法 12. 12. Python 循环语法中 break 与 continue的使用 13. 14. Python 三目运算符 14. 15. Python 循环语法中 pass 语句的使用 15. 16. Python 循环语法示例 16. 17. Python 函数 17. 18. Python main 函数 18. 19. Python print 函数 19. 20. Python print format 输出格式化 20. 21. Python print 输出到文件 21. 22. Python 输入 22. 23. Python import 导入模块 23. 25. Python 中递归的使用 24. 26. Python 匿名函数 25. 27. Python lambda 26. 28. Python PIP 包管理机制 27. 29. Python 命令行参数 28. 30. Python Numbers 包 29. 31. Python 随机数 30. 32. Python String 转 int 31. 34. Python 自定义异常 Exception 32. 35. Python 继承 33. 36. Python 父类 34. 38. Python 操作符重载 35. 39. Python __str__ and __repr__

8. Python 命名空间和变量生存范围

在本教程中,我们将学习Python名称空间和变量范围。在之前的教程中,我们了解到Python自定义异常.

Python命名空间

名称空间是避免歧义和使名称唯一的命名系统。如果你熟悉其他编程语言(即C/C++ + java),你可能已经知道了名字空间。

但是,Python的命名空间是使用Python字典. 这意味着,命名空间基本上是一个键值对。对于给定的键,将有一个值。在下面几节中,我们将讨论名称及其空间。

名称及其空间

如果你剖析这个词的名称空间,你会得到两件事。一个是名字,另一个是空间。基本上,名称是指对象名称(也称为标识符)。这意味着,您声明的对象是扩展名称空间。我们在前面说过python中的名称空间是使用dictionary实现的。考虑一下,有两个名称空间,nameA和nameB。你可以把它们想象成


nameA={ ‘var_name1’=object1, ‘var_name2’=object2, …}
nameB={ ‘var_name1’=object3, ‘var_name2’=object5, ‘var_name3’=object6, …}

在这里,您可以看到,两个名称空间中的名称可以相同,但它们作为对象不同。因此,名称空间允许我们使用名称相同但名称空间不同的对象。下面的代码将为您提供命名空间的基本概念。


name = "Andy"  # define name


def printBob():
   name = "Bob"  # define name in function
   print("printing from the def: ", name)  # print from function

# the main function
print("printing from the main: ", name)  # print from the main
printBob()  # call the function to print

产生的产出将是


printing from the main:  Andy
printing from the def:  Bob

所以,您可以看到两个不同的对象具有相同的名称,但它们在不同的范围内。因此,它们的输出不同。

Python变量范围

实际上,scope是指可以从中访问该作用域对象的编码区域。这意味着,您不能从代码的任何地方访问特定函数的对象。就像下面的代码一样,您将看到您不能从对象的范围之外访问它。


def printBob():
   var = "print it"
   print("printing from the function: ", var)  # this will print


# call the function to  print the variable value
printBob()
# try to access the object from outside of its scope
print("printing from the main: ", var)  # this will produce error

因此,您将看到如下输出。

也就是说,可以从主作用域调用函数,但不能从主作用域访问该函数的对象。所以,范围的概念来了。基本上,可以将一个缩进块作为其范围。这意味着,在以下代码中:;


var = 0
name = "absicsa"

def function_outer():
   # global var    ; no need to declare to call the value
   name = "nabisco"

   def function_inner():
       global var  # need to declare global to modify the value
       name = "outlet"
       var = 23
       print("name :",name, ", var :", var)

   print("name :", name, ", var :", var)
   function_inner()

print("name :", name, ", var :", var)
function_outer()

代码的输出将是;

在这里,您可以看到,相同的缩进块由相同的命名空间组成。所以function_outer() function can be called from the main function’s scope while the 函数_inner()函数可以从函数u outer()函数的作用域。你也可以看到全球的可以从内部命名空间访问变量。

命名空间的生存期

命名空间的生存期不同,因为它们是在不同的时间创建的。当作用域结束时,在该作用域中创建的对象通常会被删除。这就是为什么不能从外部名称空间访问提供内部名称空间的对象,因为它们尚未创建或名称空间已被删除。但是在前面的示例中,您可以看到您可以从外部命名空间从内部命名空间访问对象。

所以,这就是Python名称空间的全部内容。希望你能理解。如果您有任何疑问,请使用注释框。

参考文献:官方文件