python教程對(duì)函數(shù)中的參數(shù)進(jìn)行排序
內(nèi)建的 sorted() 函數(shù)可接受一個(gè)用來(lái)傳遞可調(diào)用對(duì)象( callable ) 的參數(shù) key,而該可調(diào)用對(duì)象會(huì)返回待排序?qū)ο笾械哪承┲?,sorted則利用這些值來(lái)比較對(duì)象。
例如,如果應(yīng)用中有一系列的 User 對(duì)象實(shí)例,而我們想通過(guò) user_id 屬性來(lái)對(duì)他們排序,則可以提供一個(gè)可調(diào)用對(duì)象將 User 實(shí)例作為輸入然后返回 user_id。
class User:
def __init__(self, user_id):
self.user_id = user_id
def __repr__(self):
return 'User({})'.format(self.user_id)
users = [User(23), User(3), User(99)]
print(users)
# [User(23), User(3), User(99)]
sorted(users, key=lambda u: user_id)
# [User(3), User(23), User(99)]
除了可以用 lambda 表達(dá)式外,另一種方式是使用 operator.attrgetter()
from operator import attrgetter
sorted(users, key=attrgetter('user_id'))
# [User(3), User(23), User(99)]
要使用 lambda 表達(dá)式還是 attrgetter() 或許只是一種個(gè)人喜好。但是通常來(lái)說(shuō),attrgetter() 要更快一些,而且允許同時(shí)提取多個(gè)字段值的能力。
這和針對(duì)字典的 operator.itemgetter() 的使用很類似。
如果 User 實(shí)例還有一個(gè) first_name 和 last_name 屬性的話,可以執(zhí)行如下的排序操作:
by_name = sorted(users, key=attrgetter('last_name', 'first_name'))
同樣,本節(jié)所用到的技術(shù)也使用于像 min() 和 max() 這樣的函數(shù)。
min(Users, key=attrgetter('user_id'))
# User(3)
max(Users, key=attrgetter('user_id'))
# User(99)
以上就是python教程對(duì)函數(shù)中的參數(shù)進(jìn)行排序的詳細(xì)內(nèi)容,更多關(guān)于Python參數(shù)排序的資料請(qǐng)關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信