91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Jupyter中重新導入特定的Python文件

發布時間:2021-08-13 17:21:18 來源:億速云 閱讀:225 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何在Jupyter中重新導入特定的Python文件”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何在Jupyter中重新導入特定的Python文件”這篇文章吧。

Jupyter 是數據分析領域非常有名的開發環境,使用 Jupyter 寫數據分析相關的代碼會大大節約開發時間。

設想這樣一個場景:別的部門的同事傳給你一個數據分析的模塊,用于實現對數據的高級分析。模塊里面有上百個函數。

如果直接寫 Python 文件來調用數據分析模塊,那么使用方法非常簡單:

from analyze import FathersAnalyzer

data = [...]
father = FathersAnalyzer(data)
result = father.analyze()
print(f'分析結果為:{result}')

現在,你需要使用 Jupyter 來調用這個分析模塊。你應該怎么在 Jupyter里面調用?

你可能會覺得,這還不簡單嗎?直接把這個模塊的代碼與 Jupyter Notebook 的 .ipynb 文件放在一起,然后在 Jupyter 里面像導入普通模塊那樣導入即可,如下圖所示:

如何在Jupyter中重新導入特定的Python文件

那么現在問題來了,如果我此時修改了 analyze.py 文件,會出現什么情況呢?

我們改一下看看,如下圖所示。

如何在Jupyter中重新導入特定的Python文件

重新運行這個 Cell 中的代碼,代碼中雖然有 from analyze import FathersAnalyzer ,看起來像是重新導入了這個模塊,但是運行卻發現,它運行的是修改之前的代碼。

這是因為,一個 Jupyter Notebook 中的所有代碼,都是在同一個運行時中運行的代碼,當你多次導入同一個模塊時,Python 的包管理機制會自動忽略后面的導入,始終只使用第一次導入的結果(所以使用這種方式也可以實現單例模式)。

那么如果我在修改了被導入的包以后,想重新導入它怎么辦呢?有3種方案:

importlib

如何在Jupyter中重新導入特定的Python文件

但這種方案弊端也很明顯——除非你按順序運行每一個 Cell,否則,你的代碼會變成下圖這樣:

如何在Jupyter中重新導入特定的Python文件

在每一個 Cell 里面都需要 重新加載一次分析模塊,否則,很有可能在你單獨運行某一個 Cell 的時候,用的是老的代碼,就會導致難以察覺的 bug。

使用 Jupyter 自帶的 %autoreload :

%load_ext autoreload
%autoreload 1
%aimport analyze 

data = 123
importlib.reload(analyze)
father = analyze.FathersAnalyzer(data)
result = father.analyze()
print(result)

運行效果如下圖所示:

如何在Jupyter中重新導入特定的Python文件

其中關鍵的代碼有三行:

%load_ext autoreload
%autoreload 1
%aimport analyze

這三行代碼只有在 Jupyter 里面才能正常運行,在 普通的.py 文件里面這樣寫會報錯。它們的作用是:第1行啟動 autoreload 機制。第2行,設置自動加載通過 %aimport 導入的模塊。第3行使用 %aimport 導入 analyze 模塊。

這樣寫以后,任意一個 Cell 運行,所有被 %aimport 導入的模塊都會被重新加載一次。從而讓你每次都使用最新的代碼。

當然,你還可以進一步偷懶,把特殊代碼縮減為2行:

%load_ext autoreload
%autoreload 2

%autoreload 后面的參數被設置為2時,每次運行任意一個 Cell,都會自動重新加載所有 import xxx 導入的模塊。這樣做的代價是,運行會慢一些。

以上是“如何在Jupyter中重新導入特定的Python文件”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柯坪县| 赤水市| 吉木萨尔县| 邓州市| 江达县| 肇庆市| 高安市| 高平市| 扎鲁特旗| 息烽县| 保靖县| 通州市| 边坝县| 乐陵市| 紫阳县| 巴中市| 秀山| 永康市| 泸州市| 宜兰市| 宾阳县| 隆回县| 六枝特区| 迁安市| 景宁| 崇明县| 沈丘县| 理塘县| 虹口区| 新巴尔虎右旗| 克山县| 阳泉市| 稷山县| 天镇县| 外汇| 民乐县| 措美县| 卢氏县| 正蓝旗| 垣曲县| 社旗县|