溫馨提示×

溫馨提示×

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

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

偏函數(shù)怎么在Python中使用

發(fā)布時(shí)間:2021-01-04 14:57:16 來源:億速云 閱讀:150 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章給大家介紹偏函數(shù)怎么在Python中使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

python中偏函數(shù)

當(dāng)一個(gè)函數(shù)有很多參數(shù)時(shí),調(diào)用者就需要提供多個(gè)參數(shù)。如果減少參數(shù)個(gè)數(shù),就可以簡化調(diào)用者的負(fù)擔(dān)。

比如,int()函數(shù)可以把字符串轉(zhuǎn)換為整數(shù),當(dāng)僅傳入字符串時(shí),int()函數(shù)默認(rèn)按十進(jìn)制轉(zhuǎn)換:

>>> int('12345')
12345

int()函數(shù)還提供額外的base參數(shù),默認(rèn)值為10。如果傳入base參數(shù),就可以做 N 進(jìn)制的轉(zhuǎn)換:

>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565

假設(shè)要轉(zhuǎn)換大量的二進(jìn)制字符串,每次都傳入int(x, base=2)非常麻煩,于是,我們想到,可以定義一個(gè)int2()的函數(shù),默認(rèn)把base=2傳進(jìn)去:

def int2(x, base=2):
  return int(x, base)

這樣,我們轉(zhuǎn)換二進(jìn)制就非常方便了:

>>> int2('1000000')
64
>>> int2('1010101')
85

functools.partial就是幫助我們創(chuàng)建一個(gè)偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個(gè)新的函數(shù)int2:

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85

所以,functools.partial可以把一個(gè)參數(shù)多的函數(shù)變成一個(gè)參數(shù)少的新函數(shù),少的參數(shù)需要在創(chuàng)建時(shí)指定默認(rèn)值,這樣,新函數(shù)調(diào)用的難度就降低了。

任務(wù)

在第7節(jié)中,我們在sorted這個(gè)高階函數(shù)中傳入自定義排序函數(shù)就可以實(shí)現(xiàn)忽略大小寫排序。請用functools.partial把這個(gè)復(fù)雜調(diào)用變成一個(gè)簡單的函數(shù):

sorted_ignore_case(iterable)

要固定sorted()的cmp參數(shù),需要傳入一個(gè)排序函數(shù)作為cmp的默認(rèn)值。

參考代碼:

#!/usr/bin/python
#coding: utf-8
import functools
# cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()) 最左邊一定要有cmp = , 這樣執(zhí)行print的時(shí)候會(huì)執(zhí)行
# 匿名函數(shù)中的cmp函數(shù),關(guān)于為什么使用cmp = ,請看上面的例子中,base = 2, 如果說沒有base = 的話,結(jié)果
# 肯定會(huì)出錯(cuò)
# cmp函數(shù)釋義:
# cmp(x,y) 函數(shù)用于比較2個(gè)對象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
# 用于排序中,默認(rèn)從小到大
sorted_ignore_case = functools.partial(sorted, cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()))
print(sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']))
# 不使用偏函數(shù)的時(shí)候
'''
def cmp_ignore_case(s1, s2):
  u1 = s1.upper()
  u2 = s2.upper()
  if u1 > u2:
    return 1
  if u1 < u2:
    return -1
  return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
'''

運(yùn)行結(jié)果:

['about', 'bob', 'Credit', 'Zoo']

關(guān)于偏函數(shù)怎么在Python中使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI