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

首頁 > 編程 > Python > 正文

Python中偏函數用法示例

2020-02-15 21:41:04
字體:
來源:轉載
供稿:網友

本文實例講述了Python中偏函數用法。分享給大家供大家參考,具體如下:

python中偏函數

當一個函數有很多參數時,調用者就需要提供多個參數。如果減少參數個數,就可以簡化調用者的負擔。

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

>>> int('12345')12345

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

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

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

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

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

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

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

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

所以,functools.partial可以把一個參數多的函數變成一個參數少的新函數,少的參數需要在創建時指定默認值,這樣,新函數調用的難度就降低了。

任務

在第7節中,我們在sorted這個高階函數中傳入自定義排序函數就可以實現忽略大小寫排序。請用functools.partial把這個復雜調用變成一個簡單的函數:

sorted_ignore_case(iterable)

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

參考代碼:

#!/usr/bin/python#coding: utf-8import functools# cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()) 最左邊一定要有cmp = , 這樣執行print的時候會執行# 匿名函數中的cmp函數,關于為什么使用cmp = ,請看上面的例子中,base = 2, 如果說沒有base = 的話,結果# 肯定會出錯# cmp函數釋義:# cmp(x,y) 函數用于比較2個對象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1# 用于排序中,默認從小到大sorted_ignore_case = functools.partial(sorted, cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()))print(sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']))# 不使用偏函數的時候'''def cmp_ignore_case(s1, s2):  u1 = s1.upper()  u2 = s2.upper()  if u1 > u2:    return 1  if u1 < u2:    return -1  return 0print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)'''            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三都| 临沧市| 新沂市| 永年县| 昌黎县| 铜陵市| 沁阳市| 怀柔区| 含山县| 墨玉县| 子长县| 家居| 尼勒克县| 乾安县| 盖州市| 通辽市| 汉沽区| 临沧市| 五常市| 岐山县| 景德镇市| 焦作市| 桂林市| 柳林县| 平湖市| 扶沟县| 永善县| 高雄市| 林口县| 安丘市| 乐业县| 伊川县| 井冈山市| 青州市| 白朗县| 科技| 衢州市| 东莞市| 大名县| 旌德县| 龙川县|