#!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' 作业一:请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call'的日志。 ''' import functools def log(func): @functools.wraps(func) def wrapper(*args, **kw): print('begin call' ) func(*args, **kw) print('end call' ) return wrapper @log #把@log放到now()函数的定义处,相当于执行了语句:now = log(now) ,now指向一个函数 def now(): print('2015-3-25') now() print(now.__name__) ''' 作业二:再思考一下能否写出一个@log的decorator,使它既支持: @log def f(): pass 又支持 @log('execute') def f(): pass ''' import functools def logger(*text): def decorator(func): @functools.wraps(func) def wrapper(*args, **kw): if len(text)==0: print('logger无输入参数') else: for i in text: print('logger输入了参数:%s' % i) return func(*args, **kw) return wrapper return decorator @logger('xxd','asd') def today(): print('2015-3-25') today() print(today.__name__)
Sign in to make a reply
早起的达先生