Discuss / Python / 作业

作业

Topic source
#!/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__)

  • 1

Reply