1. 什么是名称空间
a. 名称空间:存放名称的地方,用于确定 标识符与对象绑定关系
2. 名称空间的加载顺序
a. 内置名称空间
b. 执行py文件时的全局名称空间
c. 在执行过程中调用函数时的局部名称空间
3. 标识符的查找顺序
a. 类似一个堆栈,加载时后加载的先查找
b. 故查找顺序与名称空间加载顺序相反
c. 在局部可以查看到全局的名称空间,但是在全局查看不了局部的名称空间
4. 名称空间需要注意的事项
a. 没有global声明
i. 在局部名称空间里,只能只出现全局变量或这局部变量
ii. 若出现赋值操作,则该量只能为局部变量,对局部变量的改动不影响全局变量(注意可变类型,如list,在其中可以进行相关操作,且操作对象是全局变量)
iii. 不能先将局部中的变量先作为全局变量使用,再作为局部变量使用
iv. 若从未进行过赋值操作,则使用全局变量
b. 使用global声明
i. 若使用了global声明,则该变量无论如何都是全局变量,就算离开了函数体,也可以使用
# a = 1
#
#
# def part_name_space_0():
# a = 2
# print(a)
#
# def part_name_space_1():
# a = 3
# print(a)
#
# part_name_space_1()
#
#
# print(a)
# part_name_space_0()
'''
run->
1
2
3
'''
# g = 1
# def local_error():
# # print(g)
# # g = 2
# # g = g+1
# g += 1
# local_error()
# print(g)
# name = "lzl"
# def f1():
# name = "Eric"
# def f2():
# name = "Snor"
# print(name)
# f2()
# f1()
# print(name)
'''
run->
Snor
lz1
'''
# a = [1]
# print(id(a))
# def f2():
# print(a)
# a.append(2)
# print(id(a)) #和外部id(a)相同
# #a = 2 #若进行赋值操作,则前三个语句将不可用,报错
# f2()
# print(a)
# def f3():
# global z
# z = 'z'
# print(z)
# f3()
# print(z)
'''
run->
z
z
'''