看板 Python 關於我們 聯絡資訊
※ 引述《sheauhei ( )》之銘言: : : → keitheis:不過不建議沒寫在開頭的 import;不然要非常小心的使用 10/23 19:34 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 這說法個人有點其他想法,算借題發揮吧 :p : 如果指的是上述例子為了繞過import exception的問題, : 而延遲了import的時間點, : 這本身做法就是有問題的...可以說是來亂的阿 orz : 不過,在一般性來講,個人建議是: : "盡可能延遲module import的時間點,至到需要用到它。" : 一個平常的例子就是, : 如果只有在某個function中需要用到某個module, : 那最好在function的local namesapce去import, : 而不要在global namespace import。 : 簡單的例子 : main.py: : import a : ... : def executeA(): : a.func() : a.py: : import b : def func(): : b.xxx() ... : b.py: : .... : 在這個例子中,executeA()這個function, : 可能從頭到尾都不會被執行到, : 但是卻因為它,從main.py開始執行時, : 就一路從a.py 一直到 b.py, : 甚至更多的module都被import進來。 : (如果你目前在做的專案有上千個module, : 你就會知道這恐怖了 囧...) 嗯嗯,受教了! 就效能為上而言我想這是可以認真考慮的 但就專案維護容易度而言,要找出一個程式用了(相依)哪些模組 我個人偏好,如 PEP 8 所推薦的,直接看檔案開頭容易 然後遇到哪裡有效能問題,再來小心地處理 除非一開始就是在寫效能導向程式(如 yyc XD) 否則太早最佳化是萬惡之源?XD : 建議是: : main.py: : def executeA(): : import a : a.func() : a.py: : def func(): : import b : b.xxx() ... : b.py: : ... : 除非executeA()被執行到, : 不然a.py 和 b.py 乃至於其後會用到的module : 都不會被load到。 : --- : 這原則的另個好處(?), : 就是可以剛好繞過原原po的那種 : a import b, b import a問題.... orz -- keitheis ") -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.229.126
apua:大推「太早最佳化是萬惡之源」 11/03 14:56