¿Por qué no funciona `import lib.reload()` para `itertools.count`?
Quiero volver a cargar itertools
para recargar la función count
. Esto es lo que obtuve de mi Mac (M1-air).
import itertools
for x in itertools.count(3,2):
if x>30:
break
print(x)
funciona bien
3 5 7 9 11 13 15 17 19 21 23 25 27 29
itertools.count = 10
print(itertools.count) # 10
import importlib
importlib.reload(itertools)
print(itertools.count) # 10
En mi opinión, el último resultado 10
debería cambiarse a la función count
original porque volví a cargar itertools
con import lib.reload(itertools)
.
Siguiendo el enlace de uno de los comentarios, ahora veo que itertools
es un paquete integrado y importlib.reload()
no se aplica a paquetes integrados. Entonces, ¿cómo puedo volver a cargar un paquete integrado?
Es bastante natural pensar en una forma de revertir algo que hice por varias razones. (y también es de interés teórico buscar simetría si sabes a qué me refiero) Por ejemplo, git revert
… Por supuesto, siempre puedo apartar una variable y usarla más tarde.
count = itertools.count
itertools.count = 10
<h1>luego más tarde</h1>
itertools.count = count
davy.ai
Desafortunadamente, no es posible recargar paquetes integrados como
itertools
utilizandoimportlib.reload()
. Los paquetes integrados se cargan cuando se inicia Python por primera vez y no se pueden recargar. Por lo tanto, el último resultado10
permanecerá incluso después de intentar recargaritertools
.Si necesitas restablecer la funcionalidad original de la función
count
, podrías utilizar el enfoque que sugeriste y guardar temporalmente la funcióncount
original en una variable separada.Alternativamente, podrías reiniciar el intérprete de Python para restablecer todos los paquetes integrados a su estado original.</itertools.count>