2017-09-15 87 views
0

我似乎無法在任何地方找到此問題,所以... MacBook Pro OSX Sierra,Pycharm CE,Python 3.6.0 :: Anaconda 4.3.1(x86_64)。Python3:爲什麼從文件導入功能只能第一次工作?

嗨我嘗試從文件導入功能,它的工作原理。 然後我改變文件中的函數,導入不起作用:函數的操作沒有改變。 我del函數,然後從文件重新導入,仍然不起作用。

例,在文件new.py

def new(inp): 
    return(inp) 

於是我進口,並呼籲:

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

哦,我想改變功能的文件中。

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

    return(this) 

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

new.py變化仍然只是輸出未修改的輸入 「INP」。 同樣的問題,如果我

del new 
from new import new 

不有所作爲,如果我改變函數的名稱(!=文件名)。

+0

它看起來像你使用IPython的。答案[這裏](https://stackoverflow.com/questions/1254370/reimport-a-module-in-python-while-interactive)可能會有用。 – roganjosh

+0

'type(inp)== str'''False'因爲'inp'不是'str' ... –

+0

我想說的是,如果你想要一個字符串,傳遞一個字符串。 '新('9')' –

回答

2

在Python 2中,這是由reload命令處理的,默認情況下它現在不在Python 3中。你必須與

from importlib import reload 

導入它,那麼你就可以import newreload(new)

+0

這似乎不起作用。 過程是什麼? from importlib import重新加載 from新的進口全新 ? –

+0

如果你'導入新的'(導入整個模塊通常是一個更好的主意),而不是'從新的導入新'它會起作用。我不認爲,但我不確定,重新加載允許重新加載特定功能 – MiKo

+0

我的同事幫助我在這裏: 1. import importib 2. importlib.reload(new)#文件 3. new.new(input )#file.function –