1. 程式人生 > >Python-21_裝飾器-02_裝飾器實現

Python-21_裝飾器-02_裝飾器實現

實現 運行 返回值 sleep 多個 功能 rgs 內存 new

-------------------------------------------------- 一、基本:--------------------------------------------------

import time
"""
# 1、裝飾器框架:
def timer(func):
    def wrapper():
        print(func)
        func()
    return wrapper    
"""
# 2、裝飾器實現例子:
# 1)、裝飾器:
def timer(func):
    def wrapper():
        start_time 
= time.time() func() # 運行的是foo() stop_time = time.time() print("被裝飾函數test運行時間 %s" % (stop_time - start_time)) return wrapper # 2)、被裝飾函數: @timer # @timer 就相當於 foo=timer(foo) 需要放在被裝飾函數的上面!!!! def foo(): time.sleep(2) print("需要增加功能的原程序") return "
原程序返回值" # 3)、調用裝飾器: # foo=timer(foo) # timer(foo) 返回的是wrapper內存地址 foo() # 執行的是wrapper

--------------------------------------------------二、加上返回值:--------------------------------------------------

import time
# 1)、裝飾器:
def timer(func):
    def wrapper():
        start_time=time.time()
        res
=func() # 運行的是foo() 如果原程序有return返回值,這裏將func()運行結果賦值給res,然後return res stop_time=time.time() print("被裝飾函數foo運行時間 %s" %(stop_time-start_time)) return res return wrapper # 2)、被裝飾函數: @timer # @timer 就相當於 foo=timer(foo) 需要放在被裝飾函數的上面!!!! def foo(): time.sleep(2) print("需要增加功能的原程序") return "原程序返回值" # 3)、調用裝飾器: # foo=timer(foo) # timer(foo) 返回的是wrapper內存地址 a=foo() # 執行的是wrapper print(a)

-------------------------------------------------- 三、加上參數:--------------------------------------------------

import time
# 1)、裝飾器:
def timer(func):
    def wrapper(*args,**kwargs):               # *args,**kwargs  可以接收任何個數(多個)的參數
        start_time=time.time()
        res=func(*args,**kwargs)              # 運行的是foo()  如果原程序有return返回值,這裏將func()運行結果賦值給res,然後return res
        stop_time=time.time()
        print("被裝飾函數foo運行時間 %s" %(stop_time-start_time))
        return res
    return wrapper

# 2)、被裝飾函數:
@timer              # @timer   就相當於 foo=timer(foo)  需要放在被裝飾函數的上面!!!!
def foo(name,age):
    time.sleep(2)
    print("需要增加功能的原程序 名字 %s 年齡 %s" %(name,age))
    return "原程序返回值"
# foo=timer(foo)
a=foo("newmet",18)
print(a)

-------------------------------------------------- 四、裝飾器實現匯總:--------------------------------------------------

import time
# 定義一個求取函數運行時間的、裝飾器框架
def timer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print("函數運行時間:%s" %(start_time-stop_time))
        return res
    return wrapper
# 原始函數--需要被裝飾的函數
@timer
def foo(name,age):
    time.sleep(3)
    print("from the test 名字 %s 年齡 %s" %(name,age))
    return "這是test的返回值"
res=foo("newmet",16)
print(res)

Python-21_裝飾器-02_裝飾器實現