官术网_书友最值得收藏!

6.11 偏函數

Python的functools模塊提供了很多有用的功能,其中一個就是偏函數(Partial function)。注意,這里的偏函數和數學意義上的偏函數不一樣。

通過設置參數的默認值,可以降低函數調用的難度,偏函數也可以做到這一點。

例如:

int()函數可以把字符串轉換為整數,當僅傳入字符串時,int()函數默認按十進制轉換:

    >>> int('2888')
    2888

int()函數還提供了base參數,默認值為10。如果傳入base參數,就可以進行N進制的轉換:

    >>> int('123456', base=8)
    42798
    >>> int('123456', 16)  #base也可以省略,直接傳入base的值
    1193046

假設要轉換大量的二進制字符串,而每次都傳入int(x, base=2)就會非常麻煩,這里可以定義一個int2()函數,默認把base=2傳進去:

這樣,轉換二進制就非常方便了:

    >>> int2('1001000')
    72
    >>> int2('1000011')
    67
    >>> int2('1001110')
    78

functools.partial就是幫助用戶創建偏函數的,不需要再自定義int2()函數,可以直接使用下面的代碼創建一個新的函數int2:

    >>> from functools import partial
    >>> int2 = partial(int, base=2)
    >>> int2('1001000')
    72
    >>> int2('1000011')
    67
    >>> int2('1001110')
    78

可見,functools.partial的作用就是把一個函數的某些參數固定住(設置默認值),返回一個新函數,調用這個新函數會更簡單。

注意 int2函數僅僅是把base參數的默認值重新設置為2,也可以在函數調用時傳入其他值:

    >>> int2('1000000', base=10)
    1000000

當函數的參數數量太多、需要簡化時,使用functools.partial可以創建一個新函數,這個新函數可以固定住原函數的部分參數,從而使調用更簡單。

主站蜘蛛池模板: 合江县| 广南县| 新民市| 剑河县| 收藏| 定南县| 西和县| 楚雄市| 沙湾县| 芦溪县| 衡阳市| 阳春市| 北流市| 三都| 神农架林区| 大名县| 子洲县| 周至县| 中江县| 砚山县| 宣化县| 怀安县| 色达县| 治多县| 施甸县| 和龙市| 闽侯县| 车险| 新竹市| 循化| 东阳市| 湖北省| 临海市| 佛山市| 武乡县| 扎囊县| 罗田县| 响水县| 贵阳市| 张家界市| 宜兰市|