亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么“進口”不好?

為什么“進口”不好?

慕無忌1623718 2019-06-04 16:57:31
為什么“進口”不好?建議不要使用import *在Python里。能不能請大家分享一下原因,這樣我下次就可以避免這樣做了嗎?
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

  • 因為它在您的命名空間中放置了很多東西(可能會從以前的導入中隱藏一些其他對象,而您不會知道)。

  • 因為您不知道什么是導入的,并且很難找到從哪個模塊導入了某個東西(可讀性)。

  • 因為你不能使用像這樣的酷工具pyflakes靜態地檢測代碼中的錯誤。


查看完整回答
反對 回復 2019-06-04
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

根據Python的禪宗:

外顯好于內隱。

..你不能反駁,對吧?


查看完整回答
反對 回復 2019-06-04
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

你不能通過**locals()去參加活動,是嗎?

因為Python缺少一個“包含”語句,這個self參數是顯式的,范圍規則非常簡單,通常很容易將手指指向一個變量并判斷該對象來自何處-不需要讀取其他模塊,也不需要任何IDE(因為語言非常動態,這在自省方面是有限的)。

這個import *打破了所有這些。

此外,它還具有隱藏bug的具體可能性。

import os, sys, foo, sqlalchemy, mystufffrom bar import *

現在,如果BAR模塊有任何“os", "mystuff“,等等.屬性,它們將覆蓋顯式導入的屬性,并可能指向非常不同的內容。__all__在BAR中通常是明智的-這說明了將隱式導入的內容-但是,如果不讀取和解析BAR模塊并遵循以下步驟,仍然很難跟蹤對象來自何處它的進口品。網絡import *當我擁有一個項目時,第一件事就是修復。

別誤會我:如果import *如果失蹤了,我會哭著要它。但必須謹慎使用。一個好的用例是在另一個模塊上提供一個Facade接口。同樣,使用條件導入語句,或者在函數/類命名空間中導入,需要遵守一些規則。

我認為,在中等到大型的項目中,或者有幾個貢獻者的小項目中,在靜態分析中需要最少的衛生-至少運行一片熱片,或者更好地運行一個配置得當的化纖板-以便在它們發生之前捕捉到幾種bug。

當然,既然這是python-你可以自由地打破規則,去探索-但是要小心那些可能會增長十倍的項目,如果源代碼缺少紀律,這將是一個問題。


查看完整回答
反對 回復 2019-06-04
  • 3 回答
  • 0 關注
  • 450 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號