在本教程中,我们将学习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名称空间的全部内容。希望你能理解。如果您有任何疑问,请使用注释框。
参考文献:官方文件