亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有多個腳本文件更好還是每個功能只有一個大腳本文件更好?

有多個腳本文件更好還是每個功能只有一個大腳本文件更好?

慕少森 2021-10-19 16:35:05
大約一年前,我開始了一個項目,涉及一個簡單的基于終端的 RPG 和 Python 3。沒有真正考慮它,我就跳了進去。我開始為每個腳本組織多個腳本......好吧,功能。但是在項目進行到一半時,對于最終目標,我不確定只有一個非常大的腳本文件或多個文件是否更容易/更有效。由于我將cmd模塊用于終端,我意識到讓實際的應用程序運行成為一個循環游戲可能對所有這些外部文件具有挑戰性,但同時我有一個__init__.py文件來組合所有功能主運行腳本。這是文件結構。澄清一下,我不是最偉大的程序員,而且我是 Python 新手。我不確定cmd模塊的兼容性問題。所以我的問題是這樣的;我應該保留這個結構并且它應該按預期工作嗎?或者我應該將所有這些assets腳本合并到一個文件中嗎?或者甚至將它們與使用的 start.py 分開cmd?這是 start 函數,以及各種腳本的一些片段。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

首先是一些術語:

  • “腳本”是打算直接執行的 python (.py) 文件 ( python myscript.py)

  • “模塊”是一個 Python 文件(通常主要包含函數和類定義),旨在由腳本或其他模塊導入。

  • “包”是一個最終包含模塊和(在 py2 中是必需的,而不是在 py3 中)__init__.py文件的目錄。

您可以查看教程以獲取有關模塊和包的更多信息。

基本上,您想要的是以連貫的單元(包/模塊/腳本)組織您的代碼。

對于一個完整的應用程序,您通常會有一個“主”模塊(不必命名為“main.py”——實際上它通常被命名為應用程序本身),它只會導入一些定義(來自 stdlib,來自 3rd部分庫和您自己的模塊),設置內容并運行應用程序的入口點。在您的示例中,這將是“start.py”腳本。

對于剩下的代碼,你想要的是每個模塊具有很強的內聚性(其中定義的函數和類密切相關并一致實現相同的功能)和低耦合(每個模塊盡可能獨立于其他模塊)。從技術上講,您可以在單個模塊中放置盡可能多的函數和類,但是太大的模塊可能會變得難以維護,因此如果在基于高內聚/低耦合的第一次重組后,您會發現自己有 5000+klocs模塊你可能想把它變成一個包含更專業的子模塊的包。

如果您仍然有幾個實用程序函數顯然不適合您的任何模塊,通常的解決方案是將它們放在“utils.py”(或“misc.py”或“helpers.py”等)中模塊。

您絕對要避免的兩件事是:

  1. 循環依賴,可以是直接的(模塊 A 依賴于模塊 B,模塊 B 依賴于模塊 A),也可以是間接的(模塊 A 依賴于模塊 B,而模塊 B 又依賴于模塊 A)。如果你發現你有這樣的情況,這意味著你應該將兩個模塊合并在一起或提取一些定義到第三個模塊。

  2. 通配符導入(“從模塊導入 *”),這是一個主要的 PITA wrt/可維護性(您無法從導入中得知某些名稱是從哪里導入的)并使代碼容易受到意外 - 有時并不明顯 - 損壞

正如您所看到的,這仍然是一個非常通用的指南,但是不能自動決定哪些屬于一起,最終取決于您自己的判斷。


查看完整回答
反對 回復 2021-10-19
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

pythonic 處理單個文件的方法(我將討論,因為它主要適用于類)是單個文件是一個模塊(不是我之前所說的包)。

許多工具通常存在于單個包中,但單個模塊中的所有工具應始終圍繞一個主題。話雖如此,我通常會將一個非常小的項目保存在一個文件中,其中包含多個函數和幾個類。然后我會使用 if main 來包含腳本,因為我希望它完整地運行。

if __name__== '__main__':

我會盡可能將邏輯分解為函數,以便腳本的主體可以作為更高級別的邏輯可讀。

簡短回答:無法在任何規模上管理每個功能的文件。您應該將東西放在具有相關功能的文件(模塊)中。是否應將當前功能聚集到模塊中取決于您。


查看完整回答
反對 回復 2021-10-19
  • 3 回答
  • 0 關注
  • 356 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號