函数内变量的作用域
变量的作用域与其定义方式有关,可以分为全局变量和局部变量。
①全局变量:变量在函数外部定义,变量的作用域是全局
②局部变量:变量在函数内部定义,变量的作用域在函数内部
>>> a=1 #全局变量
>>> def fun1():
b=2 #局部变量
print(a,b)
全局变量能够进入局部变量
>>> a=1
>>> def fun1():
b=2
print(a,b)
>>> fun1()
1 2
但是不能被修改,如果需要需改必须global
>>> a=1
>>> def fun1():
a+=1
b=2
print(a,b)
>>> fun1()
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
fun1()
File "<pyshell#14>", line 2, in fun1
a+=1
UnboundLocalError: local variable 'a' referenced before assignment
>>> a=1
>>> def fun1():
global a
a+=1
b=2
print(a,b)
>>> fun1()
2 2
局部变量不能进入全局变量,如果要进入,也需要global
>>> a=1
>>> def fun1():
b=2
print(a,b)
>>> fun1()
1 2
>>> b
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
b
NameError: name 'b' is not defined
>>> a=1
>>> def fun1():
global b
b=2
print(a,b)
>>> fun1()
1 2
>>> b
2
嵌套函数局部变量分为局部里层和局部外层
局部外层能进入局部里层,但是不能修改,要修改则nonlocal
>>> a=1 #全局变量
>>> def fun1():
b=2 #局部外层
def fun2():
c=3 #局部里层
print(a,b,c)
fun2()
>>> fun1()
1 2 3
>>> a=1
>>> def fun1():
global a
a+=1
b=2
def fun2():
nonlocal b
b+=1
c=3
print(a,b,c)
fun2()
>>> fun1()
2 3 3
闭包:一个闭包就是调用一个函数A,这个函数A返回了一个函数B。这个返回的函数B就叫做闭包。(但是B函数,一定要是嵌套在函数A里面) 。在调用函数A的时候传递的参数就是自由变量。返回函数体。
>>> def fun1():
b=2
def fun2():
c=3
print(b,c)
return fun2
>>> fun1()
<function fun1.<locals>.fun2 at 0x00000282D128A840>
回调函数:
>>> def fun1():
print('666')
>>> def fun2(a):
a()
print(888)
>>> fun2(fun1)
666
888
递归函数:一个函数自身条用自身,需要有一个终止条件
>>>def age(n):
if n==1:
return 10
else:
return age(n-1)+2