python菜鳥學習Day12 裝飾器,列舉類

2021-10-01 16:39:35 字數 2210 閱讀 6013

裝飾器(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 在被裝飾的函式執行之前做的事 ...