2017-09-15 4 views
0

Je n'arrive pas à trouver cette réponse nulle part, donc ... MacBook Pro OSX Sierra, Pycharm CE, Python 3.6.0 :: Anaconda 4.3.1 (x86_64).Python3: Pourquoi la fonction d'importation à partir du fichier fonctionne-t-elle seulement la première fois?

Salut J'essaie d'importer une fonction à partir d'un fichier, et cela fonctionne. Ensuite, je change la fonction dans le fichier, et l'importation ne fonctionne pas: il n'y a pas de changement dans le fonctionnement de la fonction. Je del de la fonction, puis ré-importer à partir du fichier, ne fonctionne toujours pas.

exemple, dans le fichier new.py

def new(inp): 
    return(inp) 

J'importer et appeler:

from new import new 
new(9) 
Out[249]: 
9 

Oh, je veux changer la fonction dans le fichier.

changements new.py à

def new(inp): 
    if type(inp) == str: 
     this = inp + "five" 

    return(this) 

from new import new 
new(9) 
Out[250]: 
9 

sorties Toujours juste l'entrée non modifiée "inp". deal Même si je

del new 
from new import new 

ne fait pas de différence si je change le nom de la fonction (! = Nom de fichier).

+0

On dirait que vous utilisez ipython. Les réponses [ici] (https://stackoverflow.com/questions/1254370/reimport-a-module-in-python-while-interactive) pourraient être utiles. – roganjosh

+0

'type (inp) == str' est' False' car 'inp' n'est pas' str' ... –

+0

Ce que j'essaie de dire, c'est de passer une chaîne si vous voulez une chaîne. 'new ('9')' –

Répondre

2

En Python 2, ceci a été géré par la commande reload, qui n'est pas maintenant en Python 3 par défaut. Vous devez importer avec

from importlib import reload 

Ensuite, vous pourrez import new et reload(new)

+0

Cela ne semble pas fonctionner. Quel est le processus? de importlib importation recharger de nouvelle importation nouveau ? –

+0

Si vous "importez nouveau" (l'importation de l'ensemble du module est en général une meilleure idée) au lieu de "à partir de new import new' cela fonctionnera. Je ne pense pas, mais je ne suis pas sûr, que recharger permet de recharger des fonctions spécifiques – MiKo

+0

Mon collègue m'a aidé ici: 1. importation importlib 2. importlib.reload (nouveau) # le fichier 3. new.new (entrée) # file.function –