import module1[, module2[,... moduleN] # 當咱們使用import語句的時候,Python解釋器經過本身的搜索路徑(存在sys.path裏)進行搜索
from modname import name1[, name2[, ... nameN]] # 這個聲明不會把整個modulename模塊導入到當前的命名空間中,只會將它裏面的name1或name2單個引入到執行這個聲明的模塊的全局符號表。
from modname import * # 這提供了一個簡單的方法來導入一個模塊中的全部項目。然而這種聲明不應被過多地使用。大多數狀況, Python程序員不使用這種方法,由於引入的其它來源的命名,極可能覆蓋了已有的定義。
爲了不模塊名衝突,Python又引入了按目錄來組織模塊的方法,稱爲包(Package)
舉個例子,一個abc.py的文件就是一個名字叫abc的模塊,一個xyz.py的文件就是一個名字叫xyz的模塊。
如今,假設咱們的abc和xyz這兩個模塊名字與其餘模塊衝突了,因而咱們能夠經過包來組織模塊,避免衝突。方法是選擇一個頂層包名:
引入了包之後,只要頂層的包名不與別人衝突,那全部模塊都不會與別人衝突。如今,view.py模塊的名字就變成了hello_django.app01.views,相似的,manage.py的模塊名則是hello_django.manage。
請注意,每個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,不然,Python就把這個目錄當成普通目錄(文件夾),而不是一個包。init.py能夠是空文件,也能夠有Python代碼,由於__init__.py自己就是一個模塊,而它的模塊名就是對應包的名字。
**調用包就是執行包下的__init__.py文件python
- 若是咱們是直接執行某個.py文件的時候,該文件中那麼」name == 'main'「是True,可是咱們若是從另一個.py文件經過import導入該文件的時候,這時__name__的值就是咱們這個py文件的名字而不是__main__。
- 這個功能還有一個用處:調試代碼的時候,在」if name == 'main'「中加入一些咱們的調試代碼,咱們可讓外部模塊調用的時候不執行咱們的調試代碼,可是若是咱們想排查問題的時候,直接執行該模塊文件,調試代碼可以正常運行!