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?