2014-03-03 69 views
4

我寫這將在一定在第一單元的IPython我會話的開始定期進口,但也會從其他非交互式會話進口.py文件,因爲它包含導入時可以在非交互模式下批量運行的功能。最佳實踐在IPython中

它基本上是含有許多類和函數,是很常見的模塊。

由於我在--pylab=inline選項中使用IPython,所以numpy和matplotlib函數已經被導入,但是當批量運行時使用簡單的python mymodule.py,numpy函數必須特別導入。

在結束IPython的會議期間,我會拿出兩倍的進口,一件事我不很喜歡。

這種情況下的最佳做法是什麼?不是兩次導入模塊是一種不好的做法?

+0

」是不是兩次導入模塊是一種不好的做法?「 - 你爲什麼這麼說? – user2357112

+0

這不是一種記憶浪費嗎?我來自C++的地方進行導入頭兩次導致討厭的編譯器錯誤,所以#編譯的和的#ifndef的 – linello

+0

號您可以導入模塊200次循環或具有進口A A導入B,和Python仍然將只執行每模塊的代碼一次。 (圓形進口例如可能會導致一些其他問題,雖然。) – user2357112

回答

4

反覆進口都不是問題。無論在程序中導入模塊的次數多少,Python只會運行一次代碼,只能生成模塊的一個副本。第一個之後的所有導入只會引用已經加載的模塊對象。如果你來自C++背景,你可以想象這些模塊都隱含着包含警衛。 「

+0

+1的隱含包括警衛 – linello

+0

信息在編寫程序包,什麼是進口的基礎文件夾'__init.py'時明確進口的行爲?是不是其他'.py'文件在'__init__'中共享導入? – linello

+1

@linello:否。導入會爲整個解釋器加載模塊,但它只會使單個文件的名稱可用。例如,如果'foo.py'沒有'import bar',這隻會將'bar'模塊分配給模塊'foo'中的'bar'變量。每個需要使用模塊的文件都需要分別導入它。 – user2357112