python教程對函數中的參數進行排序

內建的 sorted() 函數可接受一個用來傳遞可調用對象( callable ) 的參數 key,而該可調用對象會返回待排序對象中的某些值,sorted則利用這些值來比較對象。

例如,如果應用中有一系列的 User 對象實例,而我們想通過 user_id 屬性來對他們排序,則可以提供一個可調用對象將 User 實例作為輸入然後返回 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 表達式外,另一種方式是使用 operator.attrgetter()

from operator import attrgetter
sorted(users, key=attrgetter('user_id'))
# [User(3), User(23), User(99)]

要使用 lambda 表達式還是 attrgetter() 或許隻是一種個人喜好。但是通常來說,attrgetter() 要更快一些,而且允許同時提取多個字段值的能力。

這和針對字典的 operator.itemgetter() 的使用很類似。

如果 User 實例還有一個 first_name 和 last_name 屬性的話,可以執行如下的排序操作:

by_name = sorted(users, key=attrgetter(‘last_name’, ‘first_name’))

同樣,本節所用到的技術也使用於像 min() 和 max() 這樣的函數。

min(Users, key=attrgetter('user_id'))
# User(3)
max(Users, key=attrgetter('user_id'))
# User(99)

以上就是python教程對函數中的參數進行排序的詳細內容,更多關於Python參數排序的資料請關註WalkonNet其它相關文章!

推薦閱讀: