Python装饰器

2019-05-10

notes

1.

一个.py文件就称之为一个模块(Module)
一个python文件的编写模板
#!/usr/bin/env python3
# -- coding: utf-8 --

' a test module '

author = 'Michael Liao'

装饰器

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。装饰器的好处就是再不改变核心函数的功能的情况下,为核心函数添加其他功能!!!!详情可以借鉴

https://blog.csdn.net/beyondlee2011/article/details/86556327#3__234

<font color='maroon'>为了理解装饰器,你需要理解高阶函数,函数柯里化!!!!</font>

例子:打印日志
版本一:核心函数

def add(x,y):  
  print('我被调用执行了!!!!')#打印日志语句  
  return x+y  

add(100,200)  

版本二:分离打印日志功能

def add(x,y):  
  return x+y  

def logger(fn,x,y):  
  print('函数开始执行')  
  res=fn(x,y)  
  print('函数执行完毕')  
  return res  
logger(add,4,5)  

版本三:柯里化

def add(x,y):
  return x+y

def logger(fn):
  def inner(*args,**kargs):
    print('函数开始执行')
    res=fn(*args,**kargs)
    print('函数执行完毕')
    return res
return innner
logger(add)(4,5)

版本四:装饰器</br>

def logger(fn):
  def innner(*args,**kargs):
    print('函数开始执行')
    res=fn(*args,**kargs)
    print('函数执行完毕')
    return res
return inner

@logger   #等于add=logger(add)
def add(x,y):
  return x+y

add(4,5)

当解释器执行到@logger时,会自动把它下面的函数当作参数,传给logger函数,所以这里@logger 其实就等于 add = logger(add) 另外,logger必须要定义在add函数之前才可以被装载!这一点很重要!

版本五:

import time
import datetime

def old_properties(old_fn):
  def wrapper(new_fn):
    new_fn._name_=old_fn.name
    return new_fn
  return wrapper

def logger(fn):
  @old_properties
  def inner(*args,*kargs):
    print('函数开始执行')
    res=fn(*args,*kargs)
    print('函数执行完毕')
    return res
return inner

@logger
def add(x,y)
  time.sleep(2)
  return x+y

if _name_='_main_'
  print(add(4,5))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。