python python-3.5 typing type-hinting

python - Usando List/Tuple/etc. de escribir contra el tipo de referencia directamente como lista/tupla/etc



python-3.5 typing (1)

typing.Tuple y typing.List son tipos genéricos ; esto significa que puede especificar qué tipo de contenido deben ser:

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

Esto especifica que la tupla pasada debe contener dos valores float . No puedes hacer esto con el tipo de tuple incorporado.

typing.Tuple es especial aquí porque le permite especificar un número específico de elementos esperados y el tipo de cada posición. Use puntos suspensivos si la longitud no está establecida y el tipo debe repetirse: Tuple[float, ...] describe una tuple longitud variable con float s.

Para typing.List y otros tipos de secuencia, generalmente solo especifica el tipo para todos los elementos; List[str] es una lista de cadenas, de cualquier tamaño. Tenga en cuenta que las funciones deben tomar preferentemente el tipo. La type.Sequence como argumentos y typing.List normalmente solo se usa para los tipos de devolución; en general, la mayoría de las funciones toman cualquier secuencia y solo se repiten, pero cuando devuelve una list , realmente está devolviendo un tipo de secuencia mutable específico.

Siempre debe seleccionar los genéricos de typing incluso cuando no esté restringiendo los contenidos actualmente. Es más fácil agregar esa restricción más adelante con un tipo genérico ya que el cambio resultante será más pequeño.

¿Cuál es la diferencia de usar List , Tuple , etc. desde el módulo de typing ?

from typing import Tuple def f(points: Tuple): return map(do_stuff, points)

A diferencia de referirse a los tipos de Python directamente:

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

¿Y cuándo debo usar uno sobre el otro?