resueltos reglas recursivo recursividad recursiva problemas pila logica implementacion fractales algoritmo python reload python-import

python - reglas - Módulo recursivo de importación y recarga.



recursividad implementacion (2)

python hello.py (A) ejecuta el código una vez, cuando (A) las llamadas import hello el código se ejecuta nuevamente (B), cuando (A) y (B) reload(hello) llamadas reload(hello) , el código se ejecuta dos veces más, para cuatro veces en total.

En general, durante la vida útil de un programa, el código de un módulo se ejecutará en los siguientes momentos:

  • Una vez si es el módulo principal.
  • Cuando se importa por primera vez por cualquier módulo (incluido él mismo)
  • En cualquier momento se llama a reload() en el módulo.

En cuanto a por qué el reload() no se llama recursivamente, hay un punto de salida temprano a la función PyImport_ReloadModule () (CPython, el archivo es import.c) para evitar esto:

http://svn.python.org/view/python/trunk/Python/import.c?view=markup#l2646

... existing_m = PyDict_GetItemString(modules_reloading, name); if (existing_m != NULL) { /* Due to a recursive reload, this module is already being reloaded. */ Py_INCREF(existing_m); return existing_m; } ... load module code is below here

Alguien puede explicar por qué ejecutando el siguiente código:

archivo " hello.py ":

import hello print "hello" hello = reload(hello)

ejecutando como python hello.py imprime lo siguiente?

hello hello hello hello

¿Por qué 4 veces? Sé que cuando un módulo ya está importado, no se vuelve a importar, pero recargar las fuerzas para volver a cargar un módulo, incluso si ya está cargado. Habría esperado como resultado impresiones de ''hola'' sin límite.

¿Qué tiene que pasar para que la reload no recargue un módulo?


reload mantiene una lista (en realidad un dictado) de los módulos que está recargando actualmente para evitar la recursividad de los módulos.

Consulte http://hg.python.org/cpython/file/e6b8202443b6/Lib/imp.py#l236

Esto no está documentado, como tal, pero creo que probablemente pueda confiar en que siga siendo así.