小編給大家分享一下Python3如何實現(xiàn)減少可調用對象的參數(shù)個數(shù),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
增城ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!問題
一個被其他python代碼使用的callable對象,可能是一個回調函數(shù)或者是一個處理器,由于其參數(shù)太多,導致調用時出錯。
解決方案
如果需要減少某個函數(shù)的參數(shù)個數(shù),可以使用functools.partial() 。 partial() 函數(shù)允許給一個或多個參數(shù)設置固定的值,減少接下來被調用時的參數(shù)個數(shù)。 假設一個函數(shù)有很多參數(shù):
def func(a, b, c, d): print(a, b, c, d)
使用 partial() 函數(shù)來固定某些參數(shù)值:
from functools import partial s1 = partial(func, 1) # a = 1 print(s1(2, 3, 4)) (1, 2, 3, 4) s2 = partial(func, d=100) # d = 100 print(s2(1, 2, 3)) (1, 2, 3, 100) s3 = partial(func, 1, 2, d=100) # a = 1, b = 2, d = 100 print(s3(3)) (1, 2, 3, 100)
可以看出 partial()函數(shù)固定某些參數(shù),并返回一個新的callable對象。這個新的callable接受未賦值的參數(shù), 然后跟之前已經賦值過的參數(shù)合并起來,最后將所有參數(shù)傳遞給原始函數(shù)。
討論
假設有一個點的列表points,表示(x, y)坐標元組?,F(xiàn)在需要以點(4, 3)為基點,根據點和基點之間的距離來排序points中所有的點。
定義一個函數(shù),用來計算兩點之間的距離:
import math points = [(1, 2), (3, 4), (5, 6), (7, 8)] pt = (4, 3) def distance(p1, p2): x1, y1 = p1 x2, y2 = p2 return math.hypot(x2 - x1, y2 - y1)
列表的 sort() 排序方法,可以接受一個關鍵字參數(shù),設置自定義排序的邏輯, 但是它只能接受一個單個參數(shù)的函數(shù),很顯然,distance()函數(shù)不符合條件,通過使用 partial() 函數(shù)可以解決這個問題:
points.sort(key=partial(distance, pt)) print(points) [(3, 4), (1, 2), (5, 6), (7, 8)]
很多時候 partial() 能實現(xiàn)的效果,其實,lambda表達式也能實現(xiàn)。
points.sort(key=lambda x: distance(pt, x)) print(points) [(3, 4), (1, 2), (5, 6), (7, 8)]
看完了這篇文章,相信你對“Python3如何實現(xiàn)減少可調用對象的參數(shù)個數(shù)”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)成都網站設計公司行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。