Python中import和from的一些事。。。

  摘自python學習手冊, 用於記錄。python

  客戶端能夠執行import或from語句。若是模塊尚未加載,這兩個語句會去搜索、編譯以及執行模塊文件程序。主要差異在於,import會讀取整個模塊,因此必須進行定義後才能讀取它的變量名;from將獲取(或者是複製)模塊特定的變量名。學習

  import使一個變量名引用整個模塊對象,所以必須經過模塊名稱來獲得該模塊的屬性(例如,module1.printer)。而from會把變量名複製到另外一個做用域,因此它就能夠直接在腳本中使用複製後的變量名,而不用經過模塊(例如,printer)。對象

  from語句有破壞命名空間的潛質。若是使用from導入變量,而那些變量碰巧和做用域中現有變量重名,變量就會被悄悄的覆蓋掉。使用import語句時就不存在這種問題,由於必須經過模塊名才能獲取其內容。不過,使用from時,只要你瞭解並預料到可能發生這種事,在實際狀況下這就不是一個大問題了,尤爲是當你明確列出導入變量名時(例如,from module import x, y, z)。作用域

  另外一方面,和reload調用同時使用時,from語句有比較嚴重的問題,由於導入的變量名可能引用以前版本的對象。再者,from module import *形式的確可能破壞命名空間,讓變量名難以理解,尤爲是在導入一個以上的文件時。編譯

  比較務實的建議是:簡單的模塊通常傾向於使用import,而不是from。多數的from語句是用於明確列舉想要的變量,並且限制在每一個文件中只用一次from *形式。這樣一來,任何無定義的變量名均可以認爲是存在於from *所引用的模塊內。當你必須使用兩個不一樣模塊內定義的相同變量名變量時,才真的必須使用import,這種狀況下不能使用from。import

相關文章
相關標籤/搜索