1. 作用域的产生
就作用域而言,Python与C有着很大的区别,在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。看下面的代码:
def func():
variable = 100
print(variable)
print(variable)
代码的输出为:
NameError: name 'variable' is not defined
在作用域中定义的变量,一般只在作用域中有效。 需要注意的是:在if-elif-else、for-else、while、try-except\try-finally等关键字的语句块中并不会产成作用域。看下面的代码:
if True:
variable = 100
print(variable)
print(/******/)
print(variable)
代码的输出为:
100
******
100
所以,可以看到,虽然是在if语句中定义的variable变量,但是在if语句外部仍然能够使用。
Python 的名称空间包括:
内置名称空间,例如,内置名称空间包含 Python 的内置函数,如,abs()
模块名称空间,全局名称空间,在模块内定义的名称
局部名称空间,例如,在函数(function)或者类(class)被调用时,其内部包含的名称
不同的名称空间内的名称不会相互冲突,即是它们采用相同的名称。这也正是名称空间的作用。
内置名称空间在 Python 解释器启动时就创建了,直到 Python 解释器退出时内置名称空间才失效。这使得我们可以在程序的任何位置使用内置名称空间内的名称,例如,id(),print()等函数。
模块名称空间当模块被引用时创建,直到 Python 解释器退出时模块名称空间才失效。
函数名称空间在函数被调用时创建,函数返回后失效。
t = 1
b = 0
def func():
variable = 300
t = variable
def func1():
variable = 400
b = variable
print(t, b)