1. 程式人生 > >三.函數進階(裝飾器)二

三.函數進階(裝飾器)二

time() family start fun pri 啦啦啦啦 做的 ner microsoft

一. 裝飾器

裝飾器
裝飾器的作用
裝飾器的固定模式
裝飾器意思在已有的功能上  添加新功能但是不能修改原有的功能
# 簡單的函數裝飾器
def fun1():
 print("哈哈哈哈哈哈name")
def fun2():
   print("啦啦啦啦啦啦啦")
   fun1()
fun2()

# 啦啦啦啦啦啦啦
# 哈哈哈哈哈哈name
import  time
def aa():
    start=time.time()
    print("啦啦啦啦啦啦啦啦啦啦啦啦啦")
    time.sleep(2)
    end=time.time()
    cc
=end-start return cc,"執行時間" d=aa() print(d) # 啦啦啦啦啦啦啦啦啦啦啦啦啦 # # (2.038980722427368, ‘執
# 簡單裝飾器
import  time
def gg(ll):
    start=time.time()
    ll()
    end = time.time()
    lo=end-start
    print(lo)
    
def ff():
    time.sleep(3)
    print("啦啦啦啦啦啦啦啦啦啦啦啦啦")
gg(ff)

# 啦啦啦啦啦啦啦啦啦啦啦啦啦 # 3.0006630420684814
# 裝飾器意思在已有的功能上  添加新功能但是不能修改原有的功能
import  time
def fun():
    time.sleep(4)
    print("哈哈哈哈哈哈哈啊哈")

def b(f):          # 裝飾器函數
    def c():
        start=time.time()
        f()   # 被裝飾的函數
        end=time.time()
        print(end-start)
    return  c
a
=b(fun) a() # 哈哈哈哈哈哈哈啊哈 # # # 4.000654458999634
1 [email protected]語法糖 裝飾器  return
import  time
# 裝飾器意思在已有的功能上  添加新功能但是不能修改原有的功能
def b(f):          # 裝飾器函數
    def c():
        start=time.time()
        f()   # 被裝飾的函數
        end=time.time()
        print(end-start)
    return  c

@b          #語法 糖@裝飾器函數名           # b=b(fun)     等於@b           # b()

def fun(): # 被裝飾的函數
    time.sleep(4)
    print("哈哈哈哈哈哈哈啊111哈")
fun()

# 哈哈哈哈哈哈哈啊111哈
# 4.005651235580444
# 被裝飾的函數帶有返回值的 裝飾函數
import time
def b(f):          # 裝飾器函數
    def c():
        start=time.time()
        ret=f()   # 被裝飾的函數
        end=time.time()
        print(end-start)
        return  ret
    return  c
@b                # # b=b(fun)     等於@b 語法 糖@裝飾器函數名
def fun(): # 被裝飾的函數
    time.sleep(4)
    print("哈哈哈哈哈哈哈啊11111111111111111哈")
    return "我來學習python"
aa=fun()
print(aa)

# 哈哈哈哈哈哈哈啊11111111111111111哈
# 4.014800548553467
# 我來學習python
# 被裝飾的函數帶參數的裝飾器
import  time
def b(f):          # 裝飾器函數
    def c(a):
        start=time.time()
        ret=f(a)   # 被裝飾的函數
        end=time.time()
        print(end-start)
        return  ret
    return  c
@b          # # b=b(fun)     等於@b 語法 糖@裝飾器函數名
def fun(a): # 被裝飾的函數
    time.sleep(4)
    print("哈哈哈哈哈哈哈",a)
    return "我來學習python"
aa=fun(99999999)
print(aa)

# 哈哈哈哈哈哈哈 99999999
# 4.005716800689697
# 我來學習python
2 [email protected]語法糖 裝飾器  return   參數*arg ,**kwargs
import  time
# 被裝飾的函數帶參數的裝飾器
def b(f):          # 裝飾器函數
    def c(*args,**kwargs):
        start=time.time()
        ret=f(*args,**kwargs)   # 被裝飾的函數
        end=time.time()
        print(end-start)
        return  ret
    return  c


@b          # # b=b(fun)     等於@b 語法 糖@裝飾器函數名
def fun(a): # 被裝飾的函數
    time.sleep(4)
    print("哈哈哈哈哈哈哈",a)
    return "我來學習php11111"
bb=fun(99999999)
print(bb)


@b          # # b=b(fun)     等於@b 語法 糖@裝飾器函數名
def fun1(c,d): # 被裝飾的函數
    time.sleep(3)
    print("啦啦啦啦啦啊啦裏",c,d)
    return "我來學習python2222"
aa=fun1(10000,2000000)
print(aa)

#
# 我來學習php11111
# 啦啦啦啦啦啊啦裏 10000 2000000
# 3.008254289627075
# 我來學習python2222
import  time
# 被裝飾的函數帶參數的裝飾器
def b(f):          # 裝飾器函數
    def c(*args,**kwargs):
        start=time.time()
        f(*args,**kwargs)   # 被裝飾的函數
        end=time.time()
        print(end-start)

    return  c

@b          # # b=b(fun)     等於@b 語法 糖@裝飾器函數名
def fun(a): # 被裝飾的函數
    time.sleep(4)
    print("哈哈哈哈哈哈哈",a)
fun(99999999)


@b          # # b=b(fun)     等於@b 語法 糖@裝飾器函數名
def fun1(c,d): # 被裝飾的函數
    time.sleep(3)
    print("啦啦啦啦啦啊啦裏",c,d)
fun1(10000,2000000)
 3. 裝飾器固定模板
# 裝飾模板
def wrapper(f):  #  f參數代表被裝飾的函數
    def inner(*args,**kwargs):
         # 在裝飾函數之前要做的事情
         ret= f(*args,**kwargs)
         # 在裝飾函數之後要做的事情
         return  ret
    return  inner

@wrapper

def aa(a):
    print("11111111",a)
    return  "我要吃冰淇淋"
dd=aa(2)
print(dd)
def outer(f):
    def inner(*args,**kwargs):
         ret= f(*args,**kwargs)
         return  ret
    return inner

@outer
def aa(*args):
    print("aaaa",args)
    return "我是被裝飾的函數"
b=aa(1,666666,999,5555)
print(b)

 






















三.函數進階(裝飾器)二