在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ partial 函數(shù)
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測試
使用 @property
標準模塊
陌生的 metaclass
Base64
進程、線程和協(xié)程
讀寫二進制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡介
Requests 庫的使用
讀寫文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級特性
線程
argparse
生成器
結(jié)束語
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

partial 函數(shù)

Python 提供了一個 functools 的模塊,該模塊為高階函數(shù)提供支持,partial 就是其中的一個函數(shù),該函數(shù)的形式如下:

functools.partial(func[,*args][, **kwargs])

這里先舉個例子,看看它是怎么用的。

假設(shè)有如下函數(shù):

def multiply(x, y):
    return x * y

現(xiàn)在,我們想返回某個數(shù)的雙倍,即:

>>> multiply(3, y=2)
6
>>> multiply(4, y=2)
8
>>> multiply(5, y=2)
10

上面的調(diào)用有點繁瑣,每次都要傳入 y=2,我們想到可以定義一個新的函數(shù),把 y=2 作為默認值,即:

def double(x, y=2):
    return multiply(x, y)

現(xiàn)在,我們可以這樣調(diào)用了:

>>> double(3)
6
>>> double(4)
8
>>> double(5)
10

事實上,我們可以不用自己定義 double,利用 partial,我們可以這樣:

from functools import partial

double = partial(multiply, y=2)

partial 接收函數(shù) multiply 作為參數(shù),固定 multiply 的參數(shù) y=2,并返回一個新的函數(shù)給 double,這跟我們自己定義 double 函數(shù)的效果是一樣的。

所以,簡單而言,partial 函數(shù)的功能就是:把一個函數(shù)的某些參數(shù)給固定住,返回一個新的函數(shù)。

需要注意的是,我們上面是固定了 multiply 的關(guān)鍵字參數(shù) y=2,如果直接使用:

double = partial(multiply, 2)

2 是賦給了 multiply 最左邊的參數(shù) x,不信?我們可以驗證一下:

from functools import partial

def subtraction(x, y):
    return x - y

f = partial(subtraction, 4)  # 4 賦給了 x
>>> f(10)   # 4 - 10
-6

小結(jié)

  • partial 的功能:固定函數(shù)參數(shù),返回一個新的函數(shù)。
  • 當函數(shù)參數(shù)太多,需要固定某些參數(shù)時,可以使用 functools.partial 創(chuàng)建一個新的函數(shù)。

參考資料

上一篇:re 模塊下一篇:集合