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