推 apua:大推「太早最佳化是萬惡之源」 11/03 14:56
※ 引述《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