国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中partial()基礎用法說明

2020-01-04 13:39:35
字體:
來源:轉載
供稿:網友

前言

一個函數可以有多個參數,而在有的情況下有的參數先得到,有的參數需要在后面的情景中才能知道,python 給我們提供了partial函數用于攜帶部分參數生成一個新函數。

在functools模塊中有一個工具partial(),可以用來"凍結"一個函數的參數,并返回"凍結"參數后的新函數。

很簡單的解釋,也是官方手冊給的示例。對于int()函數,它可以將給定的數值轉換成十進制整數,轉換時可以指定以幾進制的方式解析給定的數。例如:

# 以10進制解析123,并轉換成10進制整數>>> int("123")123# 以2進制解析10101,并轉換成10進制整數>>> int("10101", base=2)21# 以13進制解析"abc12c",并轉換成10進制整數>>> int("abc12c", base=13)4053672

現在不想這樣指定base=2參數來將二進制轉換為10進制整數了,而是像普通函數一樣,直接指定待轉換的值即可。于是,定義另外一個函數來封裝int(),例如:

def inttwo(x): return int(x, base=2)inttwo("10101")

functools中提供的partial()就是做類似事情的:

inttwo = partial(int, base=2)

它表示int()中指定參數base=2,也就是"凍結"了這個參數。

>>> from functools import partial>>> inttwo = partial(int,base=2)>>> inttwo("10101")21

之所以"凍結"加上了引號,是因為可以在inttwo()中再次指定參數來覆蓋partial()中"凍結"的參數:

>>> inttwo("10101",base=10)10101

回頭再看partial()的定義:

functools.partial(func, *args, **keywords)

從它的定義不難知道,不僅僅是像int()中base這樣的kw參數格式,位置參數args也一樣能"凍結"。

partial()返回的其實是一個partial對象,這個對象包含了3個特殊的屬性:

>>> dir(inttwo)[...... 'args', 'func', 'keywords']
  • func表示該對象所封裝的原始函數
  • args表示"凍結"的位置參數列表
  • keywords表示"凍結"的關鍵字參數
>>> inttwo.func<class 'int'>>>> inttwo.args()>>> inttwo.keywords{'base': 2}

另外需要注意的是,partial()不會保留封裝函數的元數據,比如注釋文檔、注解等。

>>> def myfunc(x:int, y:int) -> int:...  ''' sum x + y '''...  return x + y# 函數元數據信息>>> myfunc.__doc__' sum x + y '>>> myfunc.__annotations__{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}# partial()包裝后的函數,沒有函數元數據>>> newfunc = functools.partial(myfunc,y=3)

所以如果需要這些元數據,必須自己手動將元數據賦值給partial對象:

>>> newfunc.__doc__ = myfunc.__doc__>>> newfunc.__annotations__ = myfunc.__annotations__>>> newfunc.__doc__' sum x + y '>>> newfunc.__annotations__{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}

最后,除了partial()可以將函數的參數"凍結",functools還提供了partialmethod()將方法的參數"凍結",但基本上用不上,就連partial()也很少用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁南县| 广西| 富民县| 溧水县| 安丘市| 土默特右旗| 英德市| 尼木县| 融水| 邳州市| 安龙县| 泽普县| 五常市| 方城县| 衡南县| 布拖县| 保靖县| 梁平县| 扎赉特旗| 南汇区| 元氏县| 汾西县| 温泉县| 淮阳县| 永丰县| 延长县| 虎林市| 泸州市| 榆中县| 柳河县| 巫山县| 连平县| 若尔盖县| 建水县| 炉霍县| 英山县| 抚顺市| 拉萨市| 清河县| 苍山县| 曲松县|