1、装饰器
直接上代码
###装饰器 日志log
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
## 相当于now = log(now)
@log
def now():
print('2015-3-25')```
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import functools
def log(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def now():
print('2015-3-25')
now()
def logger(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@logger('DEBUG')
def today():
print('2015-3-25')
today()
print(today.__name__)
now()
# now = log('execute')(now)
def log_pass(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log_pass('日志')
def now_pass():
print('2022-02-2')
now_pass()
1.1 完整练习日志实例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import functools
def logger(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
def logger(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log
def now():
print('2015-3-25')
now()
@logger('DEBUG')
def today():
print('2015-3-25')
today()
print(today.__name__)
1.2 这样写感觉更好
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import functools
# def log(func):
# @functools.wraps(func)
# def wrapper(*args, **kw):
# print('call %s():' % func.__name__)
# return func(*args, **kw)
# return wrapper
def logger(*text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (list(text), func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@logger()
def now():
print('2015-3-25')
now()
@logger('DEBUG')
def today():
print('2015-3-25')
today()
print(today.__name__)