Discuss / Python / 学到了

学到了

Topic source

雅乐landa

#1 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import functools
import time
#打印函数执行时间
def metric2(fn):
    @functools.wraps(fn)
    def wrapper(*args, **kw):
        t0=time.time()
        res=fn(*args, **kw)
        t1=time.time()
        print('%s executed in %s ms' % (fn.__name__,t1-t0))
        return res
    return wrapper

@metric2
def now():
    print('2020-11-17')
    
now()

#既支持@log,又支持@log('text')
def log(*args):
    a0=args[0]
    a1=args[1]
    def decorator(fn):
        @functools.wraps(fn)
        def wrapper(*args2, **kw):
            print('函数名:%s\nlog参数:%s' % (fn.__name__,a0+' 后面是 '+a1))
            return fn(*args2, **kw)
        return wrapper
    return decorator
@log('这里是带参数的decorator对应的参数','第二个参数') #带参数的decorator
def f2():
    print('程序执行成功')
f2()

#在程序调用前打印begin call,调用后打印end call
def log1(fn):
    @functools.wraps(fn)
    def end(func):
        print('end call function: %s' % fn.__name__)
    def wrapper(*args, **kw):
        print('begin call function: %s' % fn.__name__)
        return end(fn(*args, **kw))
    return wrapper
@log1
def f3():
    print('程序执行成功')
f3()

雅乐landa

#2 Created at ... [Delete] [Delete and Lock User]
 还是不太明白这句话 @functools.wraps(func)是干什么的

  • 1

Reply