如何使用python 中的functools.partial用法!

常常會看到有些代碼中使用 functools.partial 來包裝一個函數,以前沒有太瞭解它的用法,只是按照別人的代碼來寫,今天仔細看了一下它的用法,基本的用法仍是很簡單的。
functools.partial 的基本使用
假設咱們有一個函數, 返回傳入參數加1的結果
 
 
正常調用這個函數很簡單
 
 
會輸出4, 這個很簡單。
若是咱們再根據 addOne 生成一個新的函數
 
 
 
 
 
這時也會輸出 4。
這個4是怎麼來的?
首先咱們經過 add = functools.partial(addOne, 3) 定義一個新的變量 add , 它至關於 addOne(3) 的結果,此時的變量add是一個函數,當執行add() 時,其實執行的是addOne(3),結果也是addOne(3) 的結果,這個add()函數返回的4也就是addOne(3)的結果,這個4就是這麼來的。
複雜一點的例子
上面的addOne函數只有一個參數,咱們多加一個參,讓其返回兩個參數的和
 
 
輸出結果:
print(sum(5, 6)) 這個輸出 11 沒有什麼好說的, print(sumY(6)) 這個也輸出11,這個是怎麼來的?
當使用 sumY = functools.partial(sum, 5) 定義sumY變量時,實際上是將 sum(x, y) 函數中的x值固定爲 5 ,因此當調用sumY(6) 的時候,實際上是返回的是sum(5, 6) 的值,也就是說,sumY函數不用再傳入x參數,而是固定爲5。
kwargs 類型的參數
當一個函數的參數爲k,v的形式該怎麼定義partial函數呢?
 
 
能夠在定義 partial 函數時,將對應的參數定義好,若是上面的age=18, 則新生成的函數至關於 show(name="yyx", age=18)
注意,這裏若是使用partial定義了函數的參數,那麼再調用的時候,就不能再傳相應的參數了,如上面的已經在showP函數中定義了age=18了,在調用showP()時,只能傳name參數,即只能使用showP(「yangyanxing」), 不能再傳入一個age參數, showP(「yangyanxing」, 28), 若是再加上age參數,則會報錯。
functools.partial 有什麼用?
從上面的使用來看,彷佛使用functools.partial 也沒有什麼用,只是固定了某個參數的值,使原來的調用少傳一個參數罷了,可是咱們可能有某種函數場景,它的參數是也一個函數,好比回調函數。
 
 
咱們定義一個test函數,它會先執行了本身的一些邏輯之後,會調用傳入的callback函數,若是咱們想將show函數當成callback參數傳到test函數中,注意這裏的callback函數是沒有參數的,那麼咱們怎麼將name和age參數傳到show函數中呢?
咱們能夠改寫test()函數
 
 
這種能夠解決回調函數是show的狀況,可是若是回調函數是別的呢?fly(h), eat(), run(date), 等等, 這種函數的參數你沒法預知,你也不知道調用方會怎麼調用,因此這時就可使用 functools.partial 來生成一個新的函數
 
 
這樣就能夠在調用方本身來控制了函數的參數了。
上面的輸出結果爲
 
 
此文轉載文,著做權歸做者全部,若有侵權聯繫小編刪除!
原文地址:https://www.tuicool.com/articles/ymUjuqY
 
須要源代碼或者想了解更多的(點擊這裏查看)
相關文章
相關標籤/搜索