為什麼不建議用 from xxx import *
人生苦短,快學Python!
我們在書籍《 快學Python:自動化辦公輕鬆實戰 》中,第一章11節中詳細講解了Python模塊的安裝與導入。
![](http://mdimg.wxwenku.com/getimg/356ed03bdc643f9448b3f6485edc229b8622113ca56accfb0ee73b9341aeec3bb91ef50fbbbab34be1e63f179bff7762.jpg)
其中導入模塊有兩種常用方法 : 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)
有時候,當你導入的模塊名太長,可為它指定一個別名。
![](http://mdimg.wxwenku.com/getimg/ccdf080c7af7e8a10e9b88444af983939ca7db34c2683fb399115d267fab08af8f5e6e5a488dc10775a295abb9a0e490.jpg)
別名是模塊的另一個名稱,類似於外號,語法格式如下所示。
import pandas as pd
我們導入了pandas模塊,並指定其別名為pd。
如果使用 from 模塊名 import *
,則表示導入該模塊中所有的方法。
from math import * pow(2,4)
注:使用單下劃線“_”開頭的模塊變量或者函數是受保護的,在使用 from xxx import * 語句從模塊中導入時這些變量或者函數不能被導入。
但是,這種用法有兩個坑。第一點,正常我們只需看一下文件開頭的import語句,就能清楚地知道Python代碼中使用了哪些類,乾淨整潔,如果使用 from xxx import *
語句則會丟失該優點。
第二個坑,便是能引發名稱方面的困惑。假如現在Python代碼中要用到兩個模塊 kxpython1
和 kxpython2
,而這兩個模塊都有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()
函數用的是哪個模塊???
所以,自然會報錯了。
![](http://mdimg.wxwenku.com/getimg/6b990ce30fa9193e296dd37902816f4bc2cfd54e60ef53ff09808c48efd13cfe03a964e06dd71a979a845a0db6ba20ee.jpg)
這就是我們不建議用 from xxx import *
的原因。雖然我們認為,兩個模塊有同名導出本身也許是個小概率事件,但能避免還是儘量避免。省得我們最後寫Python代碼10分鐘,找BUG花了一整天。
人生苦短,快學Python!後續我們會繼續分享更多的Python基礎知識點。
↓ 點擊查看作者新書《快學Python》的最新優惠!
- 技術分享 | orchestrator--運維--配置集羣自動切換&測試
- AIOPS的莫拉維克悖論
- 詳談 MySQL 8.0 原子 DDL 原理
- 為什麼不建議用 from xxx import *
- 最近解決的兩個拖延數年的問題
- Oracle數據庫解決方案集錦
- 新一代雲原生數據庫暢想
- MySQL8.0賬户system_user權限,你瞭解嗎?
- Data Fabric,下一個風口?
- 帶着孩子做開學準備清單
- 十多年前的入職第一天
- 技術分享 | MySQL 編寫腳本時避免煩人的警吿
- GoldenGate案例一則:抽取進程無法捕獲數據
- 技術分享 | MySQL 設置管理員密碼無法生效一例
- PG數據庫的鎖咋弄得這麼複雜呢
- 金融業分佈式數據庫選型及HTAP場景實踐
- 我們的企業為什麼寫不好文檔
- 新數據庫時代,DBA 發展之路該如何選擇
- MySQL:修改系統時鐘會導致數據庫hang住嗎?
- 從程序員的盡頭是業務説起