Re: [問題] from xxx import ooo

看板Python作者 ( )時間12年前 (2012/10/23 13:45), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串4/6 (看更多)
: 但如果你今天的檔案內容如下: : test.py: <- 程式進入點 : import a : a.py: : class xx(): : pass : from b import yy : b.py: : from a import xx : class yy(): : pass : : 你會發現exception就沒了,而且可以正常運作。 : 因為當b試圖from a import xx, : 這時因為xx已經產生了,所以沒問題。 : : 但寫出a import b, b import a這樣的code, : 也不太好就是了 orz. : 避免這樣寫還是正確的方式 :) : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 118.163.84.235 : 推 whitefur:PUSH~~ 10/23 14:09 : ※ 編輯: sheauhei 來自: 139.175.68.252 (10/23 15:37) : 推 keitheis:感謝詳解,原來還有繞道的解法 XD 10/23 19:32 : → 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, 你就會知道這恐怖了 囧...) 建議是: 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.164.18.4

10/23 23:31, , 1F
我也支持這個慣例,不過我們違反 PEP8
10/23 23:31, 1F

10/24 11:36, , 2F
PEP8: But most importantly: know when to be inconsist
10/24 11:36, 2F

10/24 11:37, , 3F
10/24 11:37, 3F
文章代碼(AID): #1GXfzapU (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 4 之 6 篇):
文章代碼(AID): #1GXfzapU (Python)