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))