Re: [問題] from xxx import ooo
: 但如果你今天的檔案內容如下:
: 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
10/23 23:31, 1F
推
10/24 11:36, , 2F
10/24 11:36, 2F
→
10/24 11:37, , 3F
10/24 11:37, 3F
討論串 (同標題文章)