一个函数是一个作用域
作用域内部数据独享,制造作用域之间的数据隔离,但是可以利用全局的数据(上下均可)>>>父级>>父级>>.....>>全局,全局没有便报错
全局不能利用作用域的数据
a = 1
def funs():
x = 666
print(x)
print(a)
print(b)
b = 2
s = funs()
#此时函数也可以利用b的值
a = 1
def funs():
x = 666
print(x)
print(a)
print(b)
s = funs()
b = 2
#此时便不可以利用b的值
函数内部可以调用函数,前提是被调用的函数在全局中被定义(函数中再嵌套函数则不可以)
def funs():
x = 666
print(x)
def fun():
print(555)
print(999)
fun()
funs()
#结果为
666
999
555
子作用域只能找到全局的数据,不能重新赋值
但列表、集合、字典可被修改类的类型,能被子作用域在全局修改
name=[1,2,3,4]
def funs():
name.append(55)
print(name)
funs()
print(name)
如果非要在子作用域对全局进行赋值可选用global语句(只用于全局)
name=‘杨子列‘
def funs():
global name
name = ‘扬子鳄‘
funs()
print(name)
nonlocal,修改上一层的父级
ame=‘杨子列‘
def funs():
name = ‘扬子鳄‘
def fun():
nonlocal name
name = ‘yangziq‘
print(name)
fun()
funs()
print(name)
#结果为
yangziq
杨子列
原文:https://www.cnblogs.com/yangzilaing/p/13193692.html