python basics--装饰器


装饰器

装饰器用于动态地为函数扩展功能,同时不改变原本的函数定义

最简单的装饰器

import time

def decorator(fun):
    def wrapper():
        start=time.time()
        fun()
        runtime=time.time()-start
        print(runtime)
    return wrapper

@decorator
def do_something():
    print('play games!')
    

do_something()
play games!
0.0004916191101074219

目标函数带参数的装饰器

import time

def decorator(func):
    def wrapper(name):
        start=time.time()
        func(name)
        runtime=time.time()-start
        print(runtime)
    return wrapper


@decorator
def fun(name):
    print('play {} game'.format(name))
    

fun('video')
play video game
0.0004968643188476562

目标函数带有不固定参数的装饰器

import time

def decorator(func):
    def wrapper(*args,**kwargs):
        start=time.time()
        func(*args,**kwargs)
        runtime=time.time()-start
        print(runtime)
    return wrapper

@decorator
def fun1(name):
    print('play {} game'.format(name))
    

@decorator
def fun2(user,name):
    print('{} plays {} game'.format(user,name))
    
    
@decorator
def fun3(user, name, fre):
    print('{} plays {} game {} times a day'.format(user,name,fre))
    
    
fun1('video')
play video game
0.0004992485046386719
fun2('bob','video')

bob plays video game
0.0004944801330566406
fun3('bob','video','3')
bob plays video game 3 times a day
0.0004956722259521484

装饰器带参数

让目标函数执行指定次数

import time

def decorator(max):
    def decorator(func):
        def wrapper(*args,**kwargs):
            start=time.time()
            for i in range(max):
                func(*args,**kwargs)
            runtime=time.time()-start
            print(runtime)
        return wrapper
    return decorator


@decorator(3)
def fun(name):
    print('play {} games'.format(name))
    
    
fun('video')
    
    
        
play video games
play video games
play video games
0.0004942417144775391
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值