為什么不建議用 from xxx import *

導(dǎo)入模塊有兩種常用方法 :import 語(yǔ)句和 from … import 語(yǔ)句。
1、import語(yǔ)句
import語(yǔ)句會(huì)導(dǎo)入指定模塊中所有的方法,當(dāng)你需要大量使用該模塊中的不同方法時(shí),這種方式很適合你。
import 模塊名
此時(shí),當(dāng)你使用該模塊中的方法,則需要在方法名前面加上模塊名的前綴。
import math
math.pow(2,4)
2、from…import語(yǔ)句
如果你只需要使用某個(gè)模塊中的少數(shù)方法,推薦使用from…import語(yǔ)句導(dǎo)入相應(yīng)的模塊。
from 模塊名 import 方法名
此時(shí),當(dāng)你調(diào)用模塊中的方法時(shí),就不需要在方法名前面添加模塊名的前綴。
from math import pow, log
pow(2,4)
log(32,2)
有時(shí)候,當(dāng)你導(dǎo)入的模塊名太長(zhǎng),可為它指定一個(gè)別名。

別名是模塊的另一個(gè)名稱(chēng),類(lèi)似于外號(hào),語(yǔ)法格式如下所示。
import pandas as pd
我們導(dǎo)入了pandas模塊,并指定其別名為pd。
如果使用from 模塊名 import *,則表示導(dǎo)入該模塊中所有的方法。
from math import *
pow(2,4)
注:使用單下劃線(xiàn)“_”開(kāi)頭的模塊變量或者函數(shù)是受保護(hù)的,在使用 from xxx import * 語(yǔ)句從模塊中導(dǎo)入時(shí)這些變量或者函數(shù)不能被導(dǎo)入。
但是,這種用法有兩個(gè)坑。第一點(diǎn),正常我們只需看一下文件開(kāi)頭的import語(yǔ)句,就能清楚地知道Python代碼中使用了哪些類(lèi),干凈整潔,如果使用 from xxx import * 語(yǔ)句則會(huì)丟失該優(yōu)點(diǎn)。
第二個(gè)坑,便是能引發(fā)名稱(chēng)方面的困惑。假如現(xiàn)在Python代碼中要用到兩個(gè)模塊kxpython1和kxpython2,而這兩個(gè)模塊都有test()函數(shù),如果正常import語(yǔ)句并不會(huì)出現(xiàn)什么問(wèn)題。
import kxpython1
import kxpython2
kxpython1.test(123456)
kxpython2.test(123456)
但是如果使用from xxx import *語(yǔ)句,就芭比Q了。
在交互式環(huán)境中輸入如下命令:
from kxpython1 import *
from kxpython2 import *
test(123456)
你猜這時(shí)候,test()函數(shù)用的是哪個(gè)模塊???
所以,自然會(huì)報(bào)錯(cuò)了。

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