Discuss / Python / day13-2022/6/2

day13-2022/6/2

Topic source

Promethues

#1 Created at ... [Delete] [Delete and Lock User]
##装饰器  封装一个函数,并修改该函数的行为  https://www.runoob.com/w3cnote/python-func-decorators.html
def now():
    print('2022-6-2')

f = now
# del now 
print(f.__name__)

from functools import wraps

def log(func):
    @wraps(func)
    def wrapper(*args,**kw):# *args,**kw 万能不确定参数。适用任何函数的参数形式
        print(f'call {func.__name__}')
        return func(*args,**kw)
    return wrapper
@log
def now():
    print('20220602')
print(now.__name__)
now()

def log(text):
    def decorator(func):
        @wraps(func)
        def wrapper(*args,**kw):
            print(f'{text},call {func.__name__}')
            return func(*args,**kw)
        return wrapper
    return decorator

@log('hefei:')
def now():
    print('20220602')
now()
print(now.__name__)


#practice 设计一个装饰器decorator,可作用于任何函数上面,并打印该函数的执行时间
from datetime import datetime,timedelta
def runDatetime(func):
    @wraps(func)
    def wrapper(*args,**kw):
        print(f'start {func.__name__}() at {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
        return func(*args,**kw)
    return wrapper

@runDatetime
def hi(name='angel'):
    print(f'hi,{name}')

hi()

def arg_log(*text):
    def log(func):
        def wrapper(*args,**kw):
            print(f'before call, {text}')
            fr = func(*args,**kw) #执行函数并获取返回值
            print(f'after call, {text}')
            return fr
        return wrapper
    return log

@arg_log('exe')
def hello(name='angel'):
    print(f'hello {name}')
    return 1

f = hello('violet')

print(f)

  • 1

Reply