----------------------------------作用域-----------------------------------------
-
一个函数是一个作用域
-
作用域内部数据独享,制造作用域之间的数据隔离,但是可以利用全局的数据(上下均可)>>>父级>>父级>>.....>>全局,全局没有便报错
-
全局不能利用作用域的数据
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 杨子列
补充
- 全局变量必须是大写(一个程序员的修养)
-
作用域补充
for item in range(10):
pass
print(item)
#输出结果为:
#9
- 作用域补充
item = 10
def func():
item = 2
def inner():
print(item)
for item in range(10):
pass
inner()
func()
#结果为:
#9
作用域补充