zoukankan      html  css  js  c++  java
  • python基础09--闭包,装饰器

    1.1 闭包

    1、函数作为第一类对象,支持赋值给变量,作为参数传递给其它函数,作为其它函数的返回值,支持函数的嵌套,实现了__call__方法的类实例对象也可以当做函数被调用

    2、s= func  -->执行函数的内存地址

       s =func() -->函数的调用

    3、闭包:嵌套函数,内部函数调用外部函数的变量

             可以让一个局部变量常驻内存

    def  outer():

      a=1             

      def inner():       #闭包函数

        pritn(a)

      print(inner.__closuer__)  #如果结果是cell 就是个闭包函数

     

    4、常见闭包形式   在函数的外部使用内部的函数,既把内部的函数变为一个变量

    def  outer():

      a=1 #常驻内存,防止其他程序改变这个变量

      def inner():       #闭包函数

        pritn(a)

        return inner

    inn = outer()         #函数内存指向一个全局变量

    inn()

     

    1.2 装饰器

    1、装饰器作用,不想修改函数的调用方式,但是还想再原来函数前后增加功能

    2、开放封闭原则

    3、装饰器的本质:闭包函数

    1 def wrapper(func):
    2     def inner(*args,**kwargs):
    3         #在被装饰的函数执行之前做的事
    4         ret = func(*args,**kwargs)
    5         #在被装饰的函数执行之后做的事
    6         return ret
    7     return inner                
    wrapper

     

    4、functools

    from functools import wraps

    def wrapper(func):

      @wraps(func)                         #不改变被装饰的函数的函数名

      def inner(*args,**kwargs):

        #在被装饰的函数执行之前做的事

        ret = func(*args,**kwargs)

        #在被装饰的函数执行之后做的事

        return ret

      return inner

     

    5、带参数的装饰器 三层装饰器

  • 相关阅读:
    线性变换
    施密特正交化
    春有它的记忆,秋有它的情怀
    最美的动作其实只需要嘴角上扬-微笑
    pomotime_v1.7.2 番茄软件完全教程
    NGUI 之 不为人知的 NGUITools
    Unity3D 开发 之 加载Android应用的环境
    Unity3D 开发 之 JDK安装与环境变量配置
    Tesseract 对验证码的识别原理和实现步骤
    sizeof_and_strlen 的区别
  • 原文地址:https://www.cnblogs.com/fbug/p/11793021.html
Copyright © 2011-2022 走看看