函数内变量的作用域

变量的作用域与其定义方式有关,可以分为全局变量和局部变量。

①全局变量:变量在函数外部定义,变量的作用域是全局

②局部变量:变量在函数内部定义,变量的作用域在函数内部

>>> 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
posted @ 2018-04-02 16:16  轻风飞落叶  阅读(473)  评论(0编辑  收藏  举报