grepcake
Quiero anotar un tipo de variable en un for
-círculo. Intenté esto pero no funcionó:
for i: int in range(5):
pass
Lo que espero es que funcione el autocompletado en PyCharm 2016.3.2, pero el uso de la anotación previa no funcionó:
i: int
for i in range(5):
pass
La anotación previa de PS funciona para PyCharm >= 2017.1.
alejandro
De acuerdo a PEP 526Esto no esta permitido:
Además, uno no puede anotar variables utilizadas en un
for
owith
declaración; se pueden anotar con anticipación, de manera similar al desempaquetado de tuplas
Anótalo antes del bucle:
i: int
for i in range(5):
pass
PyCharm 2018.1 y posteriores ahora reconoce el tipo de la variable dentro del ciclo. Esto no fue compatible con versiones anteriores de PyCharm.
-
Pero habrá una información de inspección.
Local variable 'i' value is not used
.– Nube
23 de enero de 2019 a las 12:57
-
@SiminJie sí, porque esto es solo un ejemplo.
– alecxe
23 de enero de 2019 a las 13:02
-
Esto también funciona bien para bucles sobre algo que se desempaqueta dos objetos múltiples: por ejemplo
key: str df: pd.DataFrame for key, df in myData.items(): ...
– topher217
17 de julio de 2021 a las 5:23
david vasquez
No sé si esta solución es compatible con PEP o solo una característica de PyCharm, pero hice que funcionara así:
for i in range(5): #type: int
pass
y estoy usando Pycharm Community Edition 2016.2.1
-
Si bien no es compatible con PEP 526, esto funciona en PyCharm (al menos a partir de 2017.2.1) y tiene el beneficio adicional de que también funciona en Python 3.0-3.5 (que no admite la sintaxis previa a la anotación introducida en Python 3.6).
– fénix
13 de agosto de 2017 a las 12:24
-
FYI: este formato está explícitamente permitido/mencionado en PEP 484 (también para ser compatible con Python 2.7)
– Claudio
14/09/2018 a las 10:56
-
-
Este formulario también funciona con bucles for/enumerate y PyCharm 2018. p.
for index, area in enumerate(area_list): # type: int, AreaInfo
– usuario simple
4 de noviembre de 2019 a las 3:49
Esto funciona bien para mi en PyCharm (usando Python 3.6)
for i in range(5):
i: int = i
pass
-
Creo que esta debería ser la respuesta aceptada, ya que hace exactamente lo que se solicitó y no muestra otros errores y/o advertencias, a diferencia de la actualmente aceptada.
– Jani Kärkkäinen
12 de agosto de 2019 a las 6:56
-
MyPy en realidad se queja si redefine la variable en el ciclo for
– Giovanni Di Milia
26 sep 2019 a las 16:05
-
No redefina la variable.
i: int
es suficiente y no obtendrá ninguna queja.– usuario136036
6 de marzo de 2020 a las 13:03
-
Una opción elegante, a mi me parece mejor especificando tipos en comentarios.
– Vlad Iliescu
28 de junio a las 9:59
Ninguna de las respuestas aquí fue útil, excepto para decir que no puedes. Incluso la respuesta aceptada usa la sintaxis del documento PEP 526, que no es una sintaxis válida de Python. Si intenta escribir
x: int
Verás que es un error de sintaxis.
Aquí hay una solución útil:
for __x in range(5):
x = __x # type: int
print(x)
Haz tu trabajo con x
. PyCharm reconoce su tipo y el autocompletado funciona.
Solo un comentario: normalmente no debería necesitarlo ya que el tipo se deduce de la función de rango (esto es relevante para todas las variables internas declaradas)
– gdoumenc
2 de junio de 2020 a las 9:06