Python装饰器

一、装饰器的作用

在不改动原函数及其的调用方式的情况下,在原来函数的前后调节功能。

二、装饰器固定模式(最完善的)

def wrapper(fun):
    def extended(*args,**kwargs):  #可接受任意参数
        '''操作'''
        ret = fun(*args,**kwargs)   #调用原函数并传相应的参数和返回结果 
        '''操作'''
        return ret
    return extended
@wrapper
def function():
    pass
        

三、装饰器完善过程

1.简单的装饰器

import time
def function(): #被修饰的函数
    print("hello world!")

def run_time(fun):     #装饰器
    def extend():
        start = time.time()
        fun()    #原函数的调用
        end = time.time()
        return end-start
    return extend

function = run_time(function)  #将原函数名指向扩展函数
time = function() 
print(time)

2.装饰器完善-----返回值

def func():
    return (1,5,64,8)
def wrapper(fun):
    def extend():
        ret = fun()  #用一个变量接收
        return ret   #返回原函数的返回值
    return extend
func = wrapper(func)
func()

3.装饰器完善----参数

def reader(path,mode="r"):
    pass
def writer(path,permission,mode="w",long=1024):
    pass

#由于函数的参数多变,考虑用动态参数。
def wrapper(fun):
    def extend(*args,**kwargs):  #args接收位置参数,kwargs接收默认参数。
        ret = fun(*args,**kwargs)  #*args **kwargs 打散分别传参。 
        return ret  
    return extend

reader = wrapper(reader)
writer = wrapper(writer)
reader()
writer()

4.装饰器完善-----reader = wrapper(reader)-------》语法糖@

def wrapper(fun):
    def extend(*args,**kwargs):  
        ret = fun(*args,**kwargs)  
        return ret
    return extend
#语法糖:@  用法:下面必须紧接着被装饰的函数,装饰器函数写在前面
@wrapper #@wrapper相当于reader = wrapper(reader)
def reader(path,mode="r"):
    pass

@wrapper #@wrapper相当于writer = wrapper(writer)
def writer(path,permission,mode="w",long=1024):
    pass
reader()
writer()

转载于:https://www.cnblogs.com/xiaojing-/p/9480798.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值