python基礎 (六) 裝飾器

2021-08-20 20:25:43 字數 2028 閱讀 3057

裝飾器即函式,裝飾就是修飾,為其他函式新增新功能。

1.不修改被裝飾函式的源**(開放封閉原則)

2.為被裝飾函式新增新功能後,不修改被修飾函式的呼叫方式

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

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

2.函式返回值是乙個函式名

3.滿足上述條件任意乙個,都可稱之為高階函式

高階函式示例

def foo():

print('我的函式名foo作為引數傳給高階函式')

def gao_jie(func):

print('我就是高階函式,接受的引數是 %s' % func)

return func

res = gao_jie(foo)

res()

#高階函式應用1:把函式當做引數傳給高階函式

import time

def foo():

print('from the foo')

def timmer(func):

start_time=time.time()

func()

stop_time=time.time()

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

timmer(foo)

#總結:我們確實為函式foo增加了foo執行時間的功能,但是foo原來的執行方式是foo(),現在我們需要呼叫高階函式timmer(foo),改變了函式的呼叫方式

把函式當做引數傳給高階函式

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

作用:在不修改函式源**的前提下,為函式新增新功能

缺點:會改變函式的呼叫方式

#高階函式應用1:把函式當做引數傳給高階函式

import time

def foo():

print('from the foo')

def timmer(func):

start_time=time.time()

func()

stop_time=time.time()

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

timmer(foo)

#總結:我們確實為函式foo增加了foo執行時間的功能,但是foo原來的執行方式是foo(),現在我們需要呼叫高階函式timmer(foo),改變了函式的呼叫方式

把函式當做引數傳給高階函式

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

作用:不修改函式的呼叫方式

缺點 不能新增新功能

基本裝飾器框架

import time

def timer(func):

start_time = time.time()

func()

stop_time = time.time()

@timer # test = timer(test) 語法糖

def test():

time.sleep(3)

print('test函式')

test()

帶返回值

import time

def timer(func):

start_time = time.time()

res = func()

stop_time = time.time()

return res

@timer # test = timer(test)

def test():

time.sleep(3)

print('test函式')

return '這是test的返回值'

print(res)

五、解壓序列

l = [1,2,3,4,5,6,7,8,0]

a, *_ , b = l

print(a ,_ , b)

Python基礎(六) 裝飾器

def foo print 我的函式名作為引數傳給高階函式 def gao jie1 func print 我就是高階函式1,我接收的引數名是 s func func def gao jie2 func print 我就是高階函式2,我的返回值是 s func return func gao jie...

函式基礎(六) 裝飾器

知道京東吧 不知道?那你知道 蘑菇街吧 我們身為使用者,在進入介面的時候 首先會提示我們登陸是吧 當我們登陸的時候,接下來的所有操作就不用再驗證身份了 否則,一到收藏啊,關注啊,就需要我們重新登陸 那我們可不可以做乙個這個呢?沒有資料庫,我們模擬乙個資料庫,懂我意思吧!db def login if...

python基礎 裝飾器

裝飾器本質就是函式,功能是為其他函式新增附加功能。原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 import time 定義乙個裝飾器計算函式執行時間 def timer func start time time.time res fun...