python - specify - ¿Cómo puedo crear una sugerencia de tipo de que mi lista devuelta contiene cadenas?
python type checking (1)
Quiero usar sugerencias de tipo en mi programa de Python. ¿Cómo puedo crear sugerencias de tipo para estructuras de datos complejas como
- listas con cuerdas
- un generador que devuelve enteros?
Ejemplo
def names() -> list:
# I would like to specify that the list contains strings?
return [''Amelie'', ''John'', ''Carmen'']
def numbers():
# Which type should I specify for `numbers()`?
for num in range(100):
yield num
Utilice el módulo de typing
; contiene genéricos , objetos tipo que puede usar para especificar contenedores con restricciones en su contenido:
import typing
def names() -> typing.List[str]: # list object with strings
return [''Amelie'', ''John'', ''Carmen'']
def numbers() -> typing.Iterator[int]: # iterator yielding integers
for num in range(100):
yield num
Dependiendo de cómo diseñe su código y de cómo quiera usar el valor de retorno de los names()
, también podría usar los tipos. types.Sequence
y tipos types.MutableSequence
Tipos de types.MutableSequence
, dependiendo de si espera poder mutar el resultado o no. .
Un generador es un tipo específico de iterador , por lo que typing.Iterator
iterador es apropiado aquí. Si su generador también acepta los valores de send()
y utiliza el return
para establecer un valor de StopIteration
, puede usar el objeto typing.Generator
también:
def filtered_numbers(filter) -> typing.Generator[int, int, float]:
# contrived generator that filters numbers; returns percentage filtered.
# first send a limit!
matched = 0
limit = yield
yield # one more yield to pause after sending
for num in range(limit):
if filter(num):
yield num
matched += 1
return (matched / limit) * 100
Si eres nuevo en la sugerencia de tipo, entonces PEP 483: la teoría de las sugerencias de tipo puede ser útil.