内嵌函数和闭包

#内嵌函数和闭包
'''
全局变量与函数中的变量
global:改变全局变量
'''
count=5#全局变量
def my():
    count=10#局部变量
    print(count)
my()#10
def my():
    global count
    count=10
    print(count)
my()#10
'''
内嵌函数
'''
def fun1():
    print("fun1在被调用")
    def fun2():
        print("fun2在被调用")
    fun2()
fun1()#fun1在被调用fun2在被调用
'''
闭包(clocune)对代码进行提炼与概括,公共用式
'''
def funx(x):
    def funy(y):
        return x*y
    return funy
print(funx(3)(5))#15
'''
def funx(x):
    def funy(y):
        return x*y
    return funy
像return funy中调用不是funy()在这个函数中,funy是一个处于funx中的局部变量函数,在funy()没有被定义前调用funy是会出现x与
y未进行赋值的情况。
在整个函数流程中,funy是funx的局部变量,funy返回的是x*y,而funx返回的是funy运行调用的结果,由于这是一个有参数的函数,
所以在调用函数前都需要将方法进行参数的赋值。
'''
def fun1():
    x=[5]
    def fun2():
         x[0] *= x[0]
         return x[0]
    return fun2()
print(fun1())#25
'''
def fun1():
    x=5
    def fun2():
        x *= x
        return x
    return fun2()
fun2是fun1中的局部变量,x=5是fun2的全局变量,fun2中的x未进行定义,所以不能访问到x=5的全局变量
更改将x放到列表中
'''
'''
nonlocal申明不是局部变量
'''
def fun1():
    x=5
    def fun2():
        nonlocal x
        x *= x
        return x
    return fun2()
print(fun1())#25

 

posted @ 2020-12-22 15:45  山君与见山  阅读(104)  评论(0编辑  收藏  举报