Python学习之名字、作用域、名字空间攻略
名字(Name)
在Python中,名字是用来标识变量、函数、类等对象的标识符。名字是区分不同对象的唯一标识符,可以通过名字来引用对象。
作用域(Scope)
作用域是指在程序中访问名字的有效范围。Python中有四种作用域:内置作用域(built-in scope)、全局作用域(global scope)、局部作用域(local scope)和非局部作用域(nonlocal scope)。
-
内置作用域:包含了Python内置的函数和变量,如
print()
和len()
。可以在任何地方访问内置作用域中的名字。 -
全局作用域:定义在模块级别的名字属于全局作用域。全局作用域中的名字可以在整个程序中访问。
-
局部作用域:定义在函数内部的名字属于局部作用域。局部作用域中的名字只能在函数内部访问。
-
非局部作用域:定义在嵌套函数内部的名字属于非局部作用域。非局部作用域中的名字可以在嵌套函数内部和外部函数内部访问。
名字空间(Namespace)
名字空间是一个存储名字和对象之间关联关系的地方。每个作用域都有一个对应的名字空间,用来存储该作用域中定义的名字和对象。
Python中有三种名字空间:内置名字空间(built-in namespace)、全局名字空间(global namespace)和局部名字空间(local namespace)。
-
内置名字空间:存储了Python内置的函数和变量的名字空间。可以通过
builtins
模块来访问内置名字空间中的名字。 -
全局名字空间:存储了全局作用域中定义的名字的名字空间。可以通过全局作用域来访问全局名字空间中的名字。
-
局部名字空间:存储了局部作用域中定义的名字的名字空间。可以通过局部作用域来访问局部名字空间中的名字。
下面是两个示例说明:
示例一:全局作用域和名字空间
x = 10 # 全局作用域中定义了名字x
def foo():
print(x) # 在函数内部访问全局作用域中的名字x
foo() # 输出:10
在这个示例中,全局作用域中定义了名字x
,在函数foo()
内部可以访问全局作用域中的名字x
。
示例二:局部作用域和名字空间
def foo():
y = 20 # 局部作用域中定义了名字y
print(y) # 在函数内部访问局部作用域中的名字y
foo() # 输出:20
print(y) # 报错:NameError: name 'y' is not defined
在这个示例中,函数foo()
内部定义了名字y
,在函数内部可以访问局部作用域中的名字y
。但是在函数外部无法访问局部作用域中的名字y
,会报错。
希望这个攻略对你理解Python中的名字、作用域和名字空间有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python学习之名字,作用域,名字空间 - Python技术站