separar - reemplazar caracteres en python
¿Anotación de tipo Python para secuencias de cadenas, pero no para cadenas? (3)
Al parecer, esto no es posible con sugerencias de tipo. PEP 484 no puede distinguir entre Sequence[str]
, Iterable[str]
y str
según Guido van Rossum.
Fuente: https://github.com/python/mypy/issues/1965 y https://github.com/python/typing/issues/256
¿Existe una sugerencia de tipo Python que coincida con listas, tuplas y posiblemente con otros tipos secuenciales, pero que no coincida con las cadenas?
El problema es que las cadenas son, al mismo tiempo, secuencias de cadenas de longitud 1 (por ejemplo, caracteres individuales), por lo que técnicamente coinciden con la Sequence[str]
, pero proporcionar una cadena a una función que espera una lista de cadenas es un error tal vez 100 % casos.
¿Hay una manera de excluir cadenas de anotación de tipo para que sea algo similar a la inexistente And[Sequence[str], Not[str]]
?
En cuanto al propósito, me gustaría anotar esta función:
PathType = Union[str, os.PathLike]
def escape_cmdline(argv: Union[List[PathType], Tuple[PathType]]) -> str: ...
Pero la firma existente me parece inflada y no cubre ningún tipo personalizado que sea compatible con listas y tuplas. ¿Hay alguna forma mejor?
No pude encontrar nada sobre la exclusión de tipo o la negación de tipo, parece que no se admite en la versión actual de Python 3. Así que la única característica distintiva de las cadenas que cruzaron mi mente es que las cadenas son inmutables . Tal vez te ayude:
from typing import Union
from collections.abc import MutableSequence
MySequenceType = Union[MutableSequence, tuple, set]
def foo(a: MySequenceType):
pass
foo(["09485", "kfjg", "kfjg"]) # passed
foo(("09485", "kfjg", "kfjg")) # passed
foo({"09485", "kfjg", "kfjg"}) # passed
foo("qwerty") # not passed
Puede que no entienda completamente sus preguntas, pero para mí, parece que está buscando el siguiente acceso directo:
for object in data:
if not isinstance(object, type):
your code functions + list...
.... etc.
el tipo de object
es str
y object
una variable a partir de sus datos sin procesar provistos a través de una list
o grupo de elementos. ¿Si malinterpreté su pregunta, tal vez ayude a profundizar su pregunta con más detalles? ¿O fue la respuesta anterior suficiente para ponerte en marcha? Entonces un poco de retroalimentación herida sea agradable ;-)