010_裝飾器

1,時間
import time
print(time.time())      #獲取當前時間
time.sleep(10)          #讓程序在執行到這個位置的時候停一下子
  1.1,計算程序運行時間
import time
def func():
    start = time.time()
    print('計算時間')
    time.sleep(0.01)
    end = time.time()
    print(end-start)
func()
  1.2,計算程序運行時間優化
import time
def timmer(f):
    start = time.time()
    f()
    end = time.time()
    print(end - start)

def func():
    time.sleep(0.01)
    print('計算時間')

timmer(func)
2,不想修改函數的調用方式,但還想在原來的函數先後添加功能
    timmer()就是一個裝飾器函數,只是對一個函數,有一些裝飾做用
import time
def func():         #被裝飾函數
    time.sleep(0.01)
    print('計算時間')

def timmer(f):      #裝飾器函數
    def inner():
        start = time.time()
        f()      #被裝飾函數
        end = time.time()
        print(end - start)
    return inner

func = timmer(func)
func()
3,@裝飾符的使用
import time

def timmer(f):      #裝飾器函數
    def inner():
        start = time.time()
        f()      #被裝飾函數
        end = time.time()
        print(end - start)
    return inner

@timmer     #這個至關於func = timmer(func)這個語句
def func():         #被裝飾函數
    time.sleep(0.01)
    print('計算時間')

#func = timmer(func)
func()
  裝飾器函數是一個閉包,由於參數f是函數timmer的變量,因此inner函數是調用的了外部函數的變量,
  由於f是外部函數的變量,根據閉包特性,f獲得傳參後就會一直是表明傳來的參數

4,裝飾器的執行


5,裝飾帶參數函數的裝飾器
import time

def timmer(f):      #裝飾器函數
    def inner(a):
        start = time.time()
        ret = f(a)      #被裝飾函數
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer
def func(a):         #被裝飾函數
    time.sleep(0.01)
    print('計算時間')
    return '返回值'

#func = timmer(func)
ret = func(1)
print(ret)

 6,格式整理python

7,查看函數名,註釋信息閉包

def wahaha():
	'''
	一個打印哇哈哈的函數
	:return:
	'''
	print('哇哈哈')

print(wahaha.__name__) #查看字符串格式的函數名
print(wahaha.__doc__) #document

 8,問題:函數被裝飾過以後不能得到被裝飾函數的信息函數

      解決問題:優化

9,帶參數的裝飾器,三層嵌套spa

 10,裝飾器的進階blog

11,多個裝飾器修飾一個函數時字符串

過程圖class

相關文章
相關標籤/搜索