裝飾器(decorater)
當想改變函式的功能,而不改變函式本身定義的時候,就用到了裝飾器。比如,列印函式呼叫的日誌。正常來說在函式中新增print 或者呼叫log包就行。但不想改變函式本身,就需要裝飾器來完成。裝飾器是高階函式,引數是需要列印日誌的函式,返回值也是函式。
from functools import wraps
import time
deflog
(func)
: @wraps(func)
def(
*args,
**kw)
: start = time.time(
)print
('call {}'
.format
(func.__name__)
) result = func(
*args,
**kw)
print
('呼叫共花費{}'
.format
(time.time(
)- start)
)return result
@log(
)def
fast
(num)
: total =
0 time.sleep(
0.2)
for i in
range
(num)
: total *= i
return total
if __name__==
'__main__'
: f = fast(
200000
)
定義自帶引數的裝飾器
def
log(text)
:def
decorater
(func)
: @wraps(func)
def(
*args,
**kwargs)
: start = time.time(
)print
('{} {}'
.format
(text, func.__name__)
) result = func(
*args,
**kwargs)
print
('呼叫共花費{}'
.format
(time.time(
)- start)
)return result
return decorater
@log(
'execute'
)def
fast
(num)
: total =
0 time.sleep(
0.2)
for i in
range
(num)
: total *= i
return total
if __name__==
'__main__'
: f = fast(
200000
)
列舉類
當我們需要定義常量是,一般用大寫的變數表示其是常量,例如 月份,jan=1,feb=2.優點是簡單,但本質上還是變數。更好的方法是為這樣的列舉型別定義乙個類,然後每個常量是這個類的唯一例項。
from enum import enum,unique
#unique可以幫助檢測是否有重複值
@unique
class
weekday
(enum)
: sun =
0#鎖定常量sun的值是0
mon =
1 tue =
2 wed =
3 thu =
4 fri =
5 sat =
6if __name__==
'__main__'
:print
(weekday.sun)
print
(weekday[
'sun'])
print
(weekday.sun.value)
print
(weekday(1)
)for one in weekday:
print
(one,one.value)
python學習 day12 模組os sys
內容 以下內容僅供個人學習使用,侵刪 usr bin env python coding utf 8 os 通過程式與作業系統做互動 import os 四個維度 重要的 1.資料夾 建立資料夾 os.mkdir,os.makedirs 刪除資料夾 os.rmdir,os.removedirs 檢視...
前端學習Day12
一 定位 1.position static absolute relative 2.position fixed 固定定位 a 參照物 瀏覽器視窗 b 不佔據空間,脫離布局流 3.讓乙個元素在瀏覽器視窗左右上下居中?第一種方法 前提 已知寬和高 position fixed left 50 top...
python學習day12 裝飾器高階
裝飾器的高階 functools.wraps 帶引數的裝飾器 多個裝飾器裝飾同乙個函式 裝飾器 開發原則 開放封閉原則 裝飾器的作用 在不改變原函式的呼叫方式的情況下,在函式的前後新增功能 裝飾器的本質 閉包函式 def inner args,kwargs print 在被裝飾的函式執行之前做的事 ...