中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

郯城县| 合阳县| 福海县| 桦南县| 怀宁县| 乌审旗| 克东县| 张家口市| 太仓市| 若羌县| 屏山县| 砀山县| 河北省| 汉寿县| 吐鲁番市| 天台县| 宕昌县| 西乌珠穆沁旗| 镇平县| 琼中| 昌江| 紫云| 富蕴县| 玛多县| 嘉义县| 乌审旗| 静海县| 太白县| 宜兰市| 杂多县| 隆安县| 蒙山县| 临江市| 乡宁县| 安龙县| 竹溪县| 满洲里市| 新乐市| 廉江市| 额济纳旗| 金阳县|