Python使用偏函式與類實現裝飾器

2022-04-03 18:15:50 字數 1371 閱讀 7233

#

-*- coding: utf-8 -*-

#author:baoshan

#python對某個物件是否能通過裝飾器形式使用只有乙個要求:decorator必須是乙個可被呼叫的物件。

#我們最熟悉的就是函式了

#除函式之外,類也可以是callable物件,只要實現了__call__函式。

#如下delayfunc是乙個實現了__call__的類,delay返回乙個偏函式,在這裡delay就可以作為乙個裝飾器

import

time

import

functools

class

delayfunc:

def__init__

(self, duration, func):

self.duration =duration

self.func =func

def__call__(self, *args, **kwargs):

print('

wait for seconds...

'.format(duration=self.duration))

time.sleep(self.duration)

return self.func(*args, **kwargs)

def eager_call(self, *args, **kwargs):

print('

call without delay')

return self.func(*args, **kwargs)

defdelay(duration):

"""裝飾器:推遲某個函式的執行。

同時提供 .eager_call方法立即執行

"""#

此處為了避免定義額外函式,直接呼叫functools.partial幫助構造

return

functools.partial(delayfunc, duration)

@delay(duration=2)

defadd(a, b):

return a +b

print

(add)

print('

-'*20)

print(add(3,5))

print('

-'*20)

print(add.func)

輸出結果:

<__main__.delayfunc object at 0x0000029a5b61da58>

--------------------wait

for 2seconds...

8--------------------

謝謝!

python 偏函式 python 偏函式

functools.partial可以設定預設引數和關鍵字引數的預設值 python的functools模組提供了很多有用的功能,其中乙個就是偏函式 partial function 要注意,這裡的偏函式和數學意義上的偏函式不一樣。在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼...

python偏函式和高階函式 高階函式與偏函式

今天主要在這裡仔細說明一下高階函式與偏函式的知識。高階函式 在絕大多數通常的計算機語言裡,函式的引數只接受基本的資料型別或是物件的引用,返回值也只是基本資料型別或者物件引用。示例如下 function test1 else return function console.log 資料不符合規範,錯誤...

Python偏函式及其使用

首先,先來看一下我們的int函式 int作為函式時有個神奇功能,將字串變為數,比如 123 返回值123。這是乙個整型數。ok,我們再想一下,int 123 當然返回的是123了。如果輸入是 int 123 8 返回是83 int 123 8 83意思是返回8進製的123在十進位制下的表示。這個8,...