学习总结(十三)

1.函数嵌套的定义

概念:在一个函数的内部定义另一个函数

函数嵌套的定义:

    1)函数(f1)想要使用(f2)的值,可以将f2直接定义到f1内部,这样就可以访问到f2的局部变量

     2)函数f2在嵌套后只能f1中使用,外部想要使用只能通过f1,只能把f2作为f1函数的返回值

     3)在外部也用同名的变量f1来接收f2函数的执行结果(f1函数的返回值),那么f2也就是可以在外部被调用

2.global关键字

   作用:将局部变量提升为全局变量

             1)全局变量没有同名变量,直接提升局部变量为全局变量

              2)有同名全局变量,就是同一全局与局部的同名变量

                       如果局部想改变全局变量的值(发生地址的变化)可以用global声明变量

        

3.nonlocal关键字

    作用:将局部的变量提升为嵌套局部变量

             1.必须有同名嵌套局部,就是统一嵌套局部与局部的同名变量

                ---如果局部想改变嵌套局部变量的值(发生地址的变化)可以用nonlocal声明该变量

    def  outer():

        num=666

          def inner():  

               nonlocal num

          inner()

  outer()

4.装饰器

       装饰器:满足开放封闭原则的一个闭包应用

@outer语法来调用outer,规定传入被装饰的函数对象,所以参数固定为一个,接受被装饰的函数对象
def outer(func):
不能确定被装饰的函数的参数:来者不拒,用可边长来接受
def inner(*args, **kwargs):
        pass # 新功能位
           res = func(*args, **kwargs) # 解压带给原功能
        pass # 新功能位
        return res
return inner

# 使用装饰器(outer),得到新功能(inner)

# 用被装饰的函数名去接受装饰器的执行结果,调用装饰器时传入被装饰的函数对象
   @outer # fn = outer(fn) = inner
   def fn(): pass

原文地址:https://www.cnblogs.com/xzcvblogs/p/10786386.html