為什麼不建議用 from xxx import *

語言: CN / TW / HK

人生苦短,快學Python!

我們在書籍《 快學Python:自動化辦公輕鬆實戰 》中,第一章11節中詳細講解了Python模塊的安裝與導入。

▲圖片作者:Andrew Zhu

其中導入模塊有兩種常用方法 : import 語句和 from … import 語句。

1、import語句

import語句會導入指定模塊中所有的方法,當你需要大量使用該模塊中的不同方法時,這種方式很適合你。

import 模塊名

此時,當你使用該模塊中的方法,則需要在方法名前面加上模塊名的前綴。

import math
math.pow(2,4)  

2、from…import語句

如果你只需要使用某個模塊中的少數方法,推薦使用from…import語句導入相應的模塊。

from 模塊名 import 方法名

此時,當你調用模塊中的方法時,就不需要在方法名前面添加模塊名的前綴。

from math import pow, log
pow(2,4)
log(32,2)

有時候,當你導入的模塊名太長,可為它指定一個別名。

別名是模塊的另一個名稱,類似於外號,語法格式如下所示。

import pandas as pd

我們導入了pandas模塊,並指定其別名為pd。

如果使用 from 模塊名 import * ,則表示導入該模塊中所有的方法。

from math import *
pow(2,4)

注:使用單下劃線“_”開頭的模塊變量或者函數是受保護的,在使用 from xxx import * 語句從模塊中導入時這些變量或者函數不能被導入。

但是,這種用法有兩個坑。第一點,正常我們只需看一下文件開頭的import語句,就能清楚地知道Python代碼中使用了哪些類,乾淨整潔,如果使用 from xxx import * 語句則會丟失該優點。

第二個坑,便是能引發名稱方面的困惑。假如現在Python代碼中要用到兩個模塊 kxpython1kxpython2 ,而這兩個模塊都有test()函數,如果正常import語句並不會出現什麼問題。

import kxpython1
import kxpython2

kxpython1.test(123456)
kxpython2.test(123456)

但是如果使用 from xxx import * 語句,就芭比Q了。

在交互式環境中輸入如下命令:

from kxpython1 import *
from kxpython2 import *

test(123456)

你猜這時候, test() 函數用的是哪個模塊???

所以,自然會報錯了。

這就是我們不建議用 from xxx import * 的原因。雖然我們認為,兩個模塊有同名導出本身也許是個小概率事件,但能避免還是儘量避免。省得我們最後寫Python代碼10分鐘,找BUG花了一整天。

人生苦短,快學Python!後續我們會繼續分享更多的Python基礎知識點。

↓ 點擊查看作者新書《快學Python》的最新優惠!