2016-11-07 110 views
3

雖然與Python的typing模塊打我碰到好奇的東西來?這是什麼意思?什麼打字.List <~T> [typing.Tuple [int]]是否意味着在Python的打字庫中?</p> <pre><code>>>> from typing import List, Tuple >>> List[Tuple[int]] typing.List<~T>[typing.Tuple[int]] </code></pre> <p>這是什麼類似Java的語法<code>List<~T></code>:

+0

你是什麼意思*「它來自哪裏」*? – jonrsharpe

+1

'List <~T>'只是基於[源代碼](https://hg.python.org/cpython/file/3.5/Lib/typing.py#l489)的泛型類型'T'的列表' 〜'表示既不共同也不反對。 – jonrsharpe

回答

1

讓我們來看看:

typing.List<~T>[typing.Tuple[int]] 
  1. typing.List意味着List
  2. <~T>typing庫類型,名爲意味着這種類型是通用的,它是在另一種類型的T定義的
  3. [typing.Tuple[int]]意味着類型T是類型Tuple[int]

在自然語言,你可以這樣寫的定義:

typing.List<~T>[typing.Tuple[int]]:一爲int的標準列表元組

3

這不是實際的Python語法,所以不要嘗試在程序中使用它。也就是說,這是他們如何選擇表示泛型類型的類型參數。在泛型類型的repr中,聲明的類型參數在類似Java的<>尖括號中列出,並且在每個類型參數之前使用+,-~,具體取決於該參數是協變,逆變還是不是。

typing.List接受名爲T單個非協變,非逆變類型參數,所以它的名字後,得到了<~T>

您會注意到typing.Tuple的名字後沒有任何<>的東西。 Tuple是一個奇怪的特例,因爲它需要可變數量的類型參數。

+0

''<~T>'/'<+T>'/'<-T>'從3.6開始,python消失了。它現在只是打印'typing.List [typing.Tuple [int]]',所以你看不到它的方差。我找不到與此相關的問題,否則我會要求將它恢復原狀:) – max

相關問題