标签:lang 作用 python 注释 错误 strong 更改 执行 创建
存放名字与值的关系的空间
在python解释器开始执行, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来,
当遇到函数定义的时候, 解释器只是把函数名读入内存, 并检查语法是否正确,表示这个函数存在了, 至于函数内部的变量和逻辑, 解释器是不关心的。
只有当函数被调用和访问的时候, 解释器才会根据函数内部声明的变量来进行开辟变量的内部空间.
1.内置名称空间
2.全局名称空间
3.临时名称空间
input = 333
print(input) # 此时是从全局开始取值,input()函数则不会被查找到
# 333
def func():
print(x)
x = 111
func() # 局部没有则在全局查找,在函数执行前x被赋值,所以并不会报错
# 111
x = 1
def func():
print(x)
def foo():
x = 222
func()
foo() # 名称空间的‘嵌套‘关系是以函数定义阶段为准,与调用位置无关
# 1
input = 111
def f1():
def f2():
input = 333
print(input)
input = 222
f2()
f1() # 名称空间的‘嵌套‘关系是以函数定义阶段为准,与调用位置无关
# 333
count = 1
def func():
count = 100 # 这是在局部名称空间重新创建变量count,并非修改了全局名称空间的count
print(count)
func()
# 100
count = 1
def func():
count += 1 # 不可更改
print(count)
func()
# local variable ‘count‘ referenced before assignment
print(globals())
print(globals())
count = 1
def func():
print(count)
count = 2
func()
# local variable ‘count‘ referenced before assignment
?
name = ‘杜甫‘
def func():
global name # 变量赋值前先声明name是全局名称,不要再造新名称
name = ‘李白‘
func() # 函数调用后,函数内声明的全局变量才生效
print(name)
# 李白
?
l1 = [111,222]
def func():
l1.append(333)
func()
print(l1)
# [111, 222, 333]
x = 0
def f1():
x = 11 # 如果f1内的x注释掉,nonlocal则报错
def f2():
nonlocal x
x = 22
f2()
print(‘f1内的x:‘,x)
f1()
# f1内的x: 22
x = 0
def f1():
x = [11,]
def f2():
x.append(22) # 如果是可变类型则不需要nonlocal,可直接修改
f2()
print(‘f1内的x:‘,x)
f1()
# f1内的x: [11, 22]
标签:lang 作用 python 注释 错误 strong 更改 执行 创建
原文地址:https://www.cnblogs.com/ChiRou/p/13427908.html