python多参数多功能多个装饰器

下面展示多参数多功能多个装饰器
装饰器无参数具体代码如下:

# Author:HY
import time
import math
import sys
def deco(func):
    def wrapper(*args,**kwargs):
        startt = time.time()
        time.sleep(0.00000001)
        func(*args,**kwargs)
        endt = time.time()
        f=str(func)[1:12]
        print("The %s runs %s" % (f,(endt - startt)))
    return wrapper

def jdt(func):
    def wrapper(*args,**kwargs):
        func(*args,**kwargs)
        for i in range(100):
            sys.stdout.write("%s" % i)
            sys.stdout.write("% ")
            sys.stdout.flush()
            time.sleep(0.1)
    return wrapper


def defunc(func):
    startt=time.time()
    func()
    endt=time.time()
    print("The func runs %s"%(endt-startt))
    # return func

@jdt
@deco
def f1(a,b):
    print("This is 周长!")
    print("C=",2*(a+b))

@deco
def f2(r):
    print("This is 面积!")
    pai=math.pi
    print("S=",pai*r*r)

@deco
def f3(a,b,c):
    print("This is 体积!")
    print("V=",a*b*c)

f1(1,2)
f2(1)
f3(3,4,5)

输出结果如下:

This is 周长!
C= 6
The function f1 runs 0.0010447502136230469
0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99% This is 面积!
S= 3.141592653589793
The function f2 runs 0.0019686222076416016
This is 体积!
V= 60
The function f3 runs 0.00160980224609375

Process finished with exit code 0

装饰器有参数具体代码如下:

import time
import math
import sys
def deco(func):
   def wrapper(*args,**kwargs):
       startt = time.time()
       time.sleep(0.00000001)
       res=func(*args,**kwargs)
       endt = time.time()
       f=str(func)[1:12]
       print("The %s runs %s" % (f,(endt - startt)),"\n")
       return res
   return wrapper

def TJ(tj_type):
   def outer_w(func):
       def wrapper(*args,**kwargs):
           if tj_type=="长方体":
               func(*args, **kwargs)
               a=int(input("输入长度:"))
               b=int(input("输入宽度:"))
               h=int(input("输入高度:"))
               print("长方体的体积V=",a*b*h)
           elif tj_type=="圆柱体":
               res=func(*args, **kwargs)
               pai = math.pi
               r = int(input("输入半径:"))
               h = int(input("输入高度:"))
               print("圆柱体的体积V=", pai * r *r* h)
               return res
       return wrapper
   return outer_w

@deco
@TJ(tj_type="圆柱体")
def f3():
   print("求体积:")
   return "This is 体积!"

print(f3())

输出结果如下:

求体积:
输入半径:1
输入高度:1
圆柱体的体积V= 3.141592653589793
The function TJ runs 2.163621187210083 

This is 体积!

Process finished with exit code 0

小结:
注意,在装饰器有参数传递的例子中,因为用了两个装饰器@deco和@TJ(tj_type=“圆柱体”),所以return值两个装饰器都要有,否则,函数 f3()的 return "This is 体积!"就无法print出来,即返回失败。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值