python 有三个名字空间:
1. 函数以及这个函数的外层函数
2. 函数所在的模块
3. built-in
python的搜索顺序从1-2-3
函数和类的属性都是属于1所在的名字空间
变量的作用域跟名字空间的地位相等,1里的变量只能在1里面被使用
2里面的变量如果在1里面没有用global声明,那么该变量只是可读,如果进行写,那么只是创建一个新的变量而已
def scope():
print t
def xx():
print t
xx()
print t
t = 10
if __name__ == '__main__':
scope()
在scope中t只是可读,如果代码变成:
def scope():
print t
t = 20
def xx():
print t
xx()
print t
t = 10
if __name__ == '__main__':
scope()
那么在scope中会创建一个本地变量t,并且scope的第一个打印语句在创建t之前,所以会出现异常,要使用外面的t,请用global声明
1. 函数以及这个函数的外层函数
2. 函数所在的模块
3. built-in
python的搜索顺序从1-2-3
函数和类的属性都是属于1所在的名字空间
变量的作用域跟名字空间的地位相等,1里的变量只能在1里面被使用
2里面的变量如果在1里面没有用global声明,那么该变量只是可读,如果进行写,那么只是创建一个新的变量而已
def scope():
print t
def xx():
print t
xx()
print t
t = 10
if __name__ == '__main__':
scope()
在scope中t只是可读,如果代码变成:
def scope():
print t
t = 20
def xx():
print t
xx()
print t
t = 10
if __name__ == '__main__':
scope()
那么在scope中会创建一个本地变量t,并且scope的第一个打印语句在创建t之前,所以会出现异常,要使用外面的t,请用global声明