sorted在 VS Code 中指向,出現如下彈窗:

這包含許多我從 Python 中不知道的語法元素,例如/, *, _T, @; 并且來自 C ,它看起來好像SupportsRichComparison類似于 C 20概念,但它到底是什么?
另外,我如何區分這兩個不同的多載是什么?
uj5u.com熱心網友回復:
這有點像火車殘骸。歸結為:
如果您只傳遞一個可迭代物件
sorted(以便關鍵字引數key獲取其默認值None),那么必須有一種方法來比較元素以確定排序。如果您確實提供了一個
key引數,那么您可以有一個任意的可迭代物件,因為 的值key將用于將值“映射”到可以比較的事物上。
常規引數可以通過位置引數或關鍵字引數指定。
前面的引數/僅是位置引數:您不能使用關鍵字引數為它們指定值。(sorted(__iterable=[1,2,3])將是非法的。)
后面的引數是*僅限關鍵字的:您只能使用關鍵字引數為它們指定值。(sorted([1,2,3], f)將是非法的。)
_T是一個型別變數:它表示一個特定但未知的型別,主要用于將型別提示系結__iterable到key.
SupportsRichComparison看起來是 a typing.Protocol,這意味著它基本上是一個抽象基類,它斷言其子類為__lt__et al 提供定義。請注意,要么 的元素__iterable是 的實體SupportsRichComparison,要么它們是某個知道如何轉換為 的實體的類_T的key實體SupportsRichComparison。
我不知該如何解釋@。它不符合我所知道的任何實際 Python 語法;它可能只是某種傳統的分隔符,用于從其他一些資訊中構造型別變數。
作為一個具體的例子,考慮復數。兩個復數不能直接比較:
>>> sorted([3 4j, 6-7j])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'complex' and 'complex'
但整數是可比較的:
>>> sorted([4, -7])
[-7, 4]
因此,如果您有一些可以映射3 4j到4和6-7j的函式,則可以-7對原始復數串列進行排序。
>>> sorted([3 4j, 6-7j], key=lambda x: x.imag)
[(6-7j), (3 4j)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/414638.html
標籤:
