[Python] 有點奇怪的 import…

[Python] 有點奇怪的 import…

最近在學 Python 的 import 指令,發現有一些奇怪的地方,

像是搞不懂如果在模組中定義了一個物件,

然後很多人去 import 那個模組的話,會跑出很多個物件嗎?之類的問題…

後來發現,實驗一下比較快… 😛

 

假設有兩個模組 a.py 和 b.py,下面是 a.py 的定義:

class A:
    def __init__(self, input):
        print “init A=”, input

def func_a():
    print “this is func a”

a = A(1)
 

 

下面是模組 b.py 的定義:

class B:
    def __init__(self, input):
        print “init B=”, input

def func_b():
    print “this is func b”

b = B(2)
 

 

下面是我的測試程式,我從 a 模組中匯入了 func_a 這個函式,也匯入了整個 b 模組:

from a import func_a
import b

func_a()
 

 

執行的結果如下:

init A= 1
init B= 2
this is func a

 

也就是說,即使我只從 a 模組匯入了 func_a 這個函式,但其餘在全域的部分其實還是會執行到

而匯入整個 b 模組的部分,自然也是把全域的部分都執行了~

差別在於 from … import … 的時候,只有被 import 進來的名稱才可以參考的到

 

另外一個測試是,多次的 import 會如何呢?

import a
import a
from a import *
from a import *

func_a()
 

 

執行的結果如下,看起來多次的 import 並不會再重新執行一次全域的部分

init A= 1
this is func a
 

 

(本頁面已被瀏覽過 278 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料