看起來好久沒更新,再不更新估計手都生鏽了。隨便寫點什麼。看看日曆,也算是新年第一篇。
說說Python中的一個寶庫functools中的一個函式——partial。
partial ,單詞的意思是“區域性的,部分的”。單看這個詞可能有些模糊,但是加上前面的functools,會不會有些明白?那個穿白衣服的同學,你來回答。你說不知道?
先來看下functools的定義:
1 |
The functools module is for higher-order functions: functions that act on or return other functions. In general, any callable object can be treated as a function for the purposes of this module. |
中文大意是:
1 |
functools這貨用於高階函式:指那些作用於函式或者返回其他函式的函式。通常情況下,只要是可以被當做函式呼叫的物件就是這個模組的目標。 |
Note
在python中都有那些東西可以被當做函式來呼叫呢?
有了上面的定義,應該大體知道, partial 這個東西是針對函式起作用的,並且是部分的,函式中哪些東西可以拆成部分呢?那個白衣服的同學。【小白:類似於裝飾器嗎。博主:你出去。】
好了,我們們繼續,裝飾器是對函式進行包裝,算是對函式的整體進行處理(其實是對輸入和輸出)。部分的話其實只有對引數進行部分處理了。怎麼部分處理的呢?看個場景就明白了。
場景:有這樣的函式:get_useragent(request) 用來獲取使用者瀏覽器的ua資訊,但是這個函式又不是在主體函式(執行頁面渲染的函式)get時呼叫的,只在模板中的一個filter中呼叫的(可以理解是在模板渲染時呼叫的),而filter在執行的時候是不能新增引數的,哪你要怎麼處理。
這時partial就得閃亮登場了,程式碼時間到:
1 2 3 4 5 6 |
#省略上下文 def get(self, request, *args, **kwargs): context = { 'ua_filter': functools.partial(get_useragent, **{"request": request}) } self.render('index.html', context) |
1 2 |
/* 對應的大致頁面程式碼如下 */ user-agent: {% ua_filter %} |
這樣的例子不知道是否夠清楚,函式的大致意思就是提前給函式繫結幾個引數。
不考慮場景的例子是這樣的:
1 2 3 4 5 6 7 |
def say(name, age): print name, age func = functools.partial(say, age=5) func('the5fire') # 結果是: the5fire 5 |
就這樣,隨便寫篇,以示存在。
另外,招聘還在繼續,機不可失,時不再來。覺得有潛力,有可培養的同學,以及還沒找到可以共同吐槽各類技術的牛人,也可以來試試,這裡有人陪你一起吐槽。