zoukankan      html  css  js  c++  java
  • Python闭包和装饰器

    如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

    1、
    def hello():
       x=3 #x表示外部作用域,(外部变量)
    def world(): #内部函数块, 功能就是打印x
         print(x) #引用外部变量x,
    return world #返回内部函数,形成一个闭包

    执行这个闭包得到的结果就是
    f1 = hello()
    f1() # 3
    2、
    当然这个x可以当成一个参数来传递,如:
    def hello(x):
       #x=3 #x表示外部作用域,(外部变量)
    def world(): #内部函数块, 功能就是打印x
         print(x) #引用外部变量x,
    return world #返回内部函数,形成一个闭包

    执行这个闭包得到的结果就是
    f1 = hello(10)
    f1() # 10
    3、
    在python中,函数也可以当成一个参数

    def hello(test):
       # 函数test表示外部作用域,(外部变量),这个test可以取别的名字
    def world(): #内部函数块, 功能是先打印123,然后再执行这个test函数 ,这个test函数只是一个变量
         print("123")
         test() #引用外部变量x,
    return world #返回内部函数,形成一个闭包

    先创建一个函数
    def mm():
      print("mm 是最帅的")

    执行这个闭包得到的结果就是
    f1 = hello(mm) #把函数mm当成一个参数
    f1() # 123
    mm 是最帅的

    4、装饰器


    其实在3中的例子,就是一个装饰器,用法就是

    @hello
    def nn():
      print("nn 是最帅的")

    执行这个函数的结果
    nn() # 123 nn 是最帅的
    这里解释一下为什么会打印123呢,因为hello这个装饰器的功能就是打印123
















  • 相关阅读:
    java中Collection 与Collections的区别
    Bridge桥接模式(设计模式11)
    动态代理模式(设计模式10)
    代理模式(静态代理)(设计模式9)
    适配器模式(工厂模式8)
    原型模式(工厂模式7)
    建造者模式(工厂模式6)
    抽象工厂模式(工厂模式5)
    工厂模式(工厂模式4)
    简单工厂模式(工厂模式3)
  • 原文地址:https://www.cnblogs.com/jinbaobao/p/10613631.html
Copyright © 2011-2022 走看看