python基礎 裝飾器

2021-09-02 01:49:55 字數 3630 閱讀 5872

裝飾器本質就是函式,功能是為其他函式新增附加功能。

原則:不修改被修飾函式的源**

不修改被修飾函式的呼叫方式

裝飾器的知識儲備:

裝飾器=高階函式+函式巢狀+閉包

import time

# 定義乙個裝飾器計算函式執行時間

def timer(func):

start_time = time.time()

res = func(*args, **kwargs)

stop_time = time.time()

print('函式執行時間是%s' % (stop_time - start_time))

return res

@timer

def func(arr):

res = 0

for i in arr:

time.sleep(0.1)

res += i

return i

print(func(range(20)))

高階函式

函式接收的引數是乙個函式名

函式的返回值是乙個函式名

滿足上面任意乙個都可稱之為高階函式

不修改被修飾函式源**

import time

def foo():

time.sleep(0.3)

print('moring sir')

def bar(func):

star_time = time.time()

func()

stop_time = time.time()

print('函式執行時間是%s' % (stop_time - star_time))

bar(foo)

# moring sir

# 函式執行時間是0.3008232116699219

不修改函式呼叫方式
def foo():

print('hello world')

def bar(func):

return func

foo = bar(foo)

foo()

# hello world

單純的高階函式實現不了裝飾器

import time

def foo():

time.sleep(3)

print('hello world')

def bar(func):

start_time = time.time()

func()

stop_time = time.time()

print('函式執行時間是%s' % (stop_time - start_time))

return func

foo = bar(foo)

foo()

# hello world

# 函式執行時間是3.000910997390747

# hello world

函式巢狀

函式巢狀是在函式裡面定義乙個函式,注意不是呼叫。

def outer(name):

def inner():

def nice():

print('nice %s' % name)

nice()

inner()

outer('cuci')

# nice cuci

閉包

實現裝飾器

# 匯入時間模組

import time

# 定義裝飾器,裝飾器就是高階函式 + 函式巢狀 + 閉包

def timer(func): # func = test

# 函式巢狀

# 閉包

# func函式開始執行的時間

start_time = time.time()

func() # test()

# func函式執行結束時間

end_time = time.time()

print('函式執行時間 %s' % (start_time - end_time))

# @time 相當於做了 test = timer(test)

@timer

def test():

time.sleep(3)

print('test 函式執行完畢!')

# test = timer(test)

test()

加上返回值

# 匯入時間模組

import time

# 定義裝飾器,裝飾器就是高階函式 + 函式巢狀 + 閉包

def timer(func): # func = test

# 函式巢狀

# 閉包

# func函式開始執行的時間

start_time = time.time()

res = func() # test()

# func函式執行結束時間

end_time = time.time()

print('函式執行時間 %s' % (start_time - end_time))

return res

# @time 相當於做了 test = timer(test)

@timer

def test():

time.sleep(3)

print('test 函式執行完畢!')

return '這是test'

# test = timer(test)

res = test()

print(res)

傳遞引數
# 匯入時間模組

import time

# 定義裝飾器,裝飾器就是高階函式 + 函式巢狀 + 閉包

def timer(func): # func = test

# 函式巢狀

# 閉包

# func函式開始執行的時間

start_time = time.time()

res = func(*args, **kwargs) # test(*args, **kwargs)

# func函式執行結束時間

end_time = time.time()

print('函式執行時間 %s' % (start_time - end_time))

return res

# @time 相當於做了 test = timer(test)

@timer

def test(name, age):

time.sleep(3)

print('test 函式執行完畢!', name, age)

return '這是test'

# test = timer(test)

res = test('alex', 23)

print(res)

python基礎 裝飾器

裝飾器形成的過程 最簡單的裝飾器 有返回值的 有乙個引數 萬能引數 裝飾器的作用 原則 開放封閉原則 語法糖 裝飾器的固定模式 import time print time.time 獲取當前時間 time.sleep 10 讓程式在執行到這個位置的時候停一會兒 def timmer f 裝飾器函式...

Python基礎 裝飾器

裝飾器是程式開發中經常會用到的乙個功能,程式開發的基礎知識,用好了裝飾器,開發效率如虎添翼,所以這也是python面試中必問的問題,但對於好多初次接觸這個知識的人來講,這個功能有點繞,這個都不會,別跟人家說你會python,看了下面的文章,保證你學會裝飾器。裝飾器 decorator 首先我們需要知...

python基礎 裝飾器

一 裝飾器定義 器即函式 裝飾即修飾,意指為其他函式新增新功能 裝飾器定義 本質就是函式,功能是為其他函式新增新功能 二 裝飾器需遵循的原則 1.不修改被裝飾函式的源 開放封閉原則 2.為被裝飾函式新增新功能後,不修改被修飾函式的呼叫方式 三 實現裝飾器知識儲備 裝飾器 高階函式 函式巢狀 閉包 四...