91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3如何實現減少可調用對象的參數個數

發布時間:2021-05-20 14:35:02 來源:億速云 閱讀:177 作者:小新 欄目:開發技術

小編給大家分享一下Python3如何實現減少可調用對象的參數個數,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

問題

一個被其他python代碼使用的callable對象,可能是一個回調函數或者是一個處理器,由于其參數太多,導致調用時出錯。

解決方案

如果需要減少某個函數的參數個數,可以使用functools.partial() 。 partial() 函數允許給一個或多個參數設置固定的值,減少接下來被調用時的參數個數。 假設一個函數有很多參數:

def func(a, b, c, d):
  print(a, b, c, d)

使用 partial() 函數來固定某些參數值:

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()函數固定某些參數,并返回一個新的callable對象。這個新的callable接受未賦值的參數, 然后跟之前已經賦值過的參數合并起來,最后將所有參數傳遞給原始函數。

討論

假設有一個點的列表points,表示(x, y)坐標元組。現在需要以點(4, 3)為基點,根據點和基點之間的距離來排序points中所有的點。

定義一個函數,用來計算兩點之間的距離:

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() 排序方法,可以接受一個關鍵字參數,設置自定義排序的邏輯, 但是它只能接受一個單個參數的函數,很顯然,distance()函數不符合條件,通過使用 partial() 函數可以解決這個問題:

points.sort(key=partial(distance, pt))
print(points)
[(3, 4), (1, 2), (5, 6), (7, 8)]

很多時候 partial() 能實現的效果,其實,lambda表達式也能實現。

points.sort(key=lambda x: distance(pt, x))
print(points)
[(3, 4), (1, 2), (5, 6), (7, 8)]

看完了這篇文章,相信你對“Python3如何實現減少可調用對象的參數個數”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山西省| 哈尔滨市| 达州市| 和硕县| 榆社县| 仙游县| 原平市| 白河县| 海口市| 庐江县| 达日县| 平阴县| 阿克苏市| 紫金县| 赞皇县| 若羌县| 依兰县| 金沙县| 府谷县| 德令哈市| 新安县| 剑阁县| 望谟县| 永德县| 喜德县| 武宣县| 云阳县| 苍溪县| 永修县| 石楼县| 壶关县| 横山县| 新郑市| 敖汉旗| 吉隆县| 郸城县| 牡丹江市| 米脂县| 西丰县| 当雄县| 郑州市|