python装饰器初步

装饰器

把一个函数当作参数,返回一个替代版的函数
本质就是返回函数的函数

“在不改变原有函数的基础上,给函数增加功能”

def fc1():
    print("1")
def ou(suiyi):
    def inn():
        fc1()
        print("2")
    return inn
cese=ou(fc1)
cese()


装饰器
def decorator(asasaaa):
    def wrapper(*args):
        asasaaa(*args) #a1
        print("1")
    return wrapper

@decorator  #a2
def f1(funcname):
    print(funcname)
@decorator  #a3
def f2(*args):
    print(args)
f1("a")
f2("a","b","c")
#a1 结合#a2a3表示,只要在前面写了@decorator  
会自动匹配参数值对应的函数并且也会执行print(1)你原本函数的内容
#a1可以自定义名字,因为#a2 #a3 会自动匹配
其中@decorator 和def decorator 名称要一致
便于理解的形式如下
def decora(f1):
    def a(a,b):
        f1(a,b)
        print("1")
        f1(a,b)
    return a
@decora
def f1(a,b):
    print(a+b)
f1(3,4)
也可以


装饰器中的返回值:如果函数有返回值,那么装饰器中也必须有返回值
def decora(f1):
    def a(*args,**kwargs):
        # f1(a,b)
        print("1")
        f1(*args,**kwargs)
    return a
@decora
def f2(*args):
    print(args)
f2(1,2)

import string
import random
import time
import functools
num=[(random.choice(string.ascii_letters+string.digits)) for i in range(100)]

def zs(fc):
    @functools.wraps(fc)  #保留函数名词和文档信息
    def wrap(*args,**kwargs):
        start_time=time.time()
        res=fc(*args,**kwargs)
        end_time=time.time()
        print("时间为%.7fs"%(end_time-start_time))
        return res
    return wrap

@zs
def fc1():
    '''s+i'''
    s=''
    for i in num:
       s+=i+""
@zs
def fc2():
    '''join'''
    # "".join(num)
    return "".join(num)
fc1()
print(fc1.__doc__)
fc2()
print(fc2.__doc__)
print(list(fc2()))

# _*_coding:utf-8_*_
'''
Name:20.5.py
Date:1/12/19
Author:hzp
Connect:hzp598@126.com
'''
import string
import random
import time
import functools
num=[(random.choice(string.ascii_letters+string.digits)) for i in range(100)]
print(num)
def zs(fc):
    @functools.wraps(fc)  #保留函数文档信息
    def wrap(*args,**kwargs):
        start_time=time.time()
        res=fc(*args,**kwargs)
        end_time=time.time()
        print("时间为%.7fs"%(end_time-start_time))
        return res
    return wrap

@zs
def fc1():
    '''s+i'''
    s=''
    for i in num:
       s+=i+""
    print(s)
@zs
def fc2():
    '''join'''
    print("".join(num))
fc1()
print(fc1.__doc__)
fc2()
print(fc2.__doc__)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值