python教程對函數(shù)中的參數(shù)進(jìn)行排序
內(nèi)建的 sorted() 函數(shù)可接受一個用來傳遞可調(diào)用對象( callable ) 的參數(shù) key,而該可調(diào)用對象會返回待排序?qū)ο笾械哪承┲?,sorted則利用這些值來比較對象。
例如,如果應(yīng)用中有一系列的 User 對象實(shí)例,而我們想通過 user_id 屬性來對他們排序,則可以提供一個可調(diào)用對象將 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() 或許只是一種個人喜好。但是通常來說,attrgetter() 要更快一些,而且允許同時提取多個字段值的能力。
這和針對字典的 operator.itemgetter() 的使用很類似。
如果 User 實(shí)例還有一個 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教程對函數(shù)中的參數(shù)進(jìn)行排序的詳細(xì)內(nèi)容,更多關(guān)于Python參數(shù)排序的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)命令行通訊錄實(shí)例教程
這篇文章主要介紹怎樣編寫了一段命令行通訊錄的小程序。下面是編寫的思路以及代碼,歡迎感興趣的同學(xué)交流探討。2016-08-08在Python上基于Markov鏈生成偽隨機(jī)文本的教程
這篇文章主要介紹了在Python上基于Markov鏈生成偽隨機(jī)文本的教程,是一個基于馬爾可夫算法的小實(shí)現(xiàn),充分體現(xiàn)了Python在科學(xué)計算中的用途,需要的朋友可以參考下2015-04-04Python3.5 Pandas模塊缺失值處理和層次索引實(shí)例詳解
這篇文章主要介紹了Python3.5 Pandas模塊缺失值處理和層次索引,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5 Pandas模塊缺失值處理和層次索引的原理、處理方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-04-04pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例
這篇文章主要介紹了pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例,本文講解了pygame窗口、窗口退出、pygame中的顏色、圓形、矩形及一個完整實(shí)例,需要的朋友可以參考下2015-04-04利用 Python ElementTree 生成 xml的實(shí)例
這篇文章主要介紹了利用 Python ElementTree 生成 xml的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03