Python3 實(shí)現(xiàn)減少可調(diào)用對(duì)象的參數(shù)個(gè)數(shù)
問題
一個(gè)被其他python代碼使用的callable對(duì)象,可能是一個(gè)回調(diào)函數(shù)或者是一個(gè)處理器,由于其參數(shù)太多,導(dǎo)致調(diào)用時(shí)出錯(cuò)。
解決方案
如果需要減少某個(gè)函數(shù)的參數(shù)個(gè)數(shù),可以使用functools.partial() 。 partial() 函數(shù)允許給一個(gè)或多個(gè)參數(shù)設(shè)置固定的值,減少接下來被調(diào)用時(shí)的參數(shù)個(gè)數(shù)。 假設(shè)一個(gè)函數(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ù),并返回一個(gè)新的callable對(duì)象。這個(gè)新的callable接受未賦值的參數(shù), 然后跟之前已經(jīng)賦值過的參數(shù)合并起來,最后將所有參數(shù)傳遞給原始函數(shù)。
討論
假設(shè)有一個(gè)點(diǎn)的列表points,表示(x, y)坐標(biāo)元組?,F(xiàn)在需要以點(diǎn)(4, 3)為基點(diǎn),根據(jù)點(diǎn)和基點(diǎn)之間的距離來排序points中所有的點(diǎn)。
定義一個(gè)函數(shù),用來計(jì)算兩點(diǎn)之間的距離:
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() 排序方法,可以接受一個(gè)關(guān)鍵字參數(shù),設(shè)置自定義排序的邏輯, 但是它只能接受一個(gè)單個(gè)參數(shù)的函數(shù),很顯然,distance()函數(shù)不符合條件,通過使用 partial() 函數(shù)可以解決這個(gè)問題:
points.sort(key=partial(distance, pt)) print(points) [(3, 4), (1, 2), (5, 6), (7, 8)]
很多時(shí)候 partial() 能實(shí)現(xiàn)的效果,其實(shí),lambda表達(dá)式也能實(shí)現(xiàn)。
points.sort(key=lambda x: distance(pt, x)) print(points) [(3, 4), (1, 2), (5, 6), (7, 8)]
以上這篇Python3 實(shí)現(xiàn)減少可調(diào)用對(duì)象的參數(shù)個(gè)數(shù)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)簡(jiǎn)單中文詞頻統(tǒng)計(jì)示例
本篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單中文詞頻統(tǒng)計(jì)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
JupyterNotebook 如何調(diào)整輸出窗口的顯示效果
這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調(diào)整實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
citespace數(shù)據(jù)處理:用python對(duì)Ref文檔進(jìn)行去重方式
這篇文章主要介紹了citespace數(shù)據(jù)處理:用python對(duì)Ref文檔進(jìn)行去重方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
python中不同數(shù)據(jù)對(duì)象的空值校驗(yàn)總結(jié)
在Python中,我們可以使用不同的方式來校驗(yàn)數(shù)值的空值、字符串的空值以及對(duì)象的空值,本文為大家整理了一些常見的方法,希望對(duì)大家有所幫助2024-01-01
使用Python進(jìn)行數(shù)獨(dú)求解詳解(一)
本文主要介紹了如何構(gòu)建一個(gè)Python腳本來解決數(shù)獨(dú)難題,本文的重點(diǎn)在于介紹用于構(gòu)建數(shù)獨(dú)求解器的回溯算法。感興趣的小伙伴可以學(xué)習(xí)一下2022-02-02

