2016-09-12 70 views
6

:Listeyi/Tuple/etc'yi kullanma. etc/yazarak vs doğrudan liste/tuple olarak türünü atıfta gelen <code>typing</code> modülünden <code>List</code>, <code>Tuple</code> vb kullanmanın Ne fark

def f(points: tuple): 
    return map(do_stuff, points) 
: Doğrudan Python'un türlerine atıfta aksine

from typing import Tuple 

def f(points: Tuple): 
    return map(do_stuff, points) 

Ve diğerini ne zaman kullanmalıyım?

+0

Birincisi, SO'nun sözdizimine vurgu yaparken çok daha iyi görünüyor! –

+0

Bunu okuduğumda, bunu okuyana kadar aynı soruyu sorduğumu kendimi buldum. https://docs.python.org/3/library/typing.html – MooingRawr

+0

[Tuple, öğe türlerini listeleyerek kullanılır. örneğin Tuple \ [int, int, str \]] (https://www.python.org/dev/peps/pep-0484/#the-typing-module) – Kasramvd

cevap

18

typing.Tuple ve typing.ListGeneric types; bu olmalı ne onların içeriğini yazın belirtebilirsiniz anlamı:

def f(points: Tuple[float, float]): 
    return map(do_stuff, points) 

Bu geçirilen tanımlama grubu iki float değerleri içeren gerektiğini belirtir. Bunu, yerleşik tuple türüyle yapamazsınız.

typing.Tuple burada, belirli bir sayıda öğeyi ve her bir konumun türünü belirtmenizi sağlaması açısından özel bir husustur. Uzunluk ayarlanmamışsa ve elips tekrarlanmalıdır: Tuple[float, ...], float s ile değişken uzunlukta tuple açıklar.

typing.List ve diğer dizi türleri için genellikle yalnızca tüm öğeler için türü belirtin; List[str], herhangi bir boyuttaki dizelerin bir listesidir. Fonksiyonların argüman olarak type.Sequence değerini alması gerektiğini ve typing.List tipik olarak sadece geri dönüş tipleri için kullanıldığını unutmayın; genel olarak çoğu fonksiyonun herhangi bir diziyi alacağı ve sadece yinelendiği, ancak bir list döndürdüğünüzde, gerçekten belirli bir değiştirilebilen dizi türünü döndürüyorsunuz. Şu anda içeriği kısıtlamıyor olsanız bile, typing jeneriklerini her zaman seçmelisiniz. Ortaya çıkan değişiklik daha küçük olacağından, bu kısıtlamayı daha sonra genel bir türle eklemek daha kolaydır.