爲何在python 目錄找不到time模塊 sys模塊等 是由於C語言實現的內置到解釋器裏面的
import 是如何工做的:有以下2個文件
模塊html
在計算機程序的開發過程當中,隨着程序代碼越寫越多,在一個文件裏代碼就會愈來愈長,愈來愈不容易維護。python
爲了編寫可維護的代碼,咱們把不少函數分組,分別放到不一樣的文件裏,這樣,每一個文件包含的代碼就相對較少,不少編程語言都採用這種組織代碼的方式。在Python中,一個.py文件就稱之爲一個模塊(Module)。web
使用模塊有什麼好處?ajax
最大的好處是大大提升了代碼的可維護性。編程
其次,編寫代碼沒必要從零開始。當一個模塊編寫完畢,就能夠被其餘地方引用。咱們在編寫程序的時候,也常常引用其餘模塊,包括Python內置的模塊和來自第三方的模塊。dom
因此,模塊一共三種:編程語言
另外,使用模塊還能夠避免函數名和變量名衝突。相同名字的函數和變量徹底能夠分別存在不一樣的模塊中,所以,咱們本身在編寫模塊時,沒必要考慮名字會與其餘模塊衝突。可是也要注意,儘可能不要與內置函數名字衝突。函數
一般包老是一個目錄,可使用import導入包,或者from + import來導入包中的部分模塊。包目錄下爲首的一個文件即是 __init__.py。而後是一些模塊文件和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。(若是__init__文件,python 2是不支持導入的,可是測試python 3支持)post
原來在python模塊的每個包中,都有一個__init__.py文件(這個文件定義了包的屬性和方法)而後是一些模塊文件和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。當你將一個包做爲模塊導入(好比從 xml導入 dom )的時候,實際上導入了它的 __init__.py 文件。測試
一個包是一個帶有特殊文件 __init__.py 的目錄。__init__.py 文件定義了包的屬性和方法。其實它能夠什麼也不定義;能夠只是一個空文件,可是必須存在。若是 __init__.py 不存在,這個目錄就僅僅是一個目錄,而不是一個包,它就不能被導入或者包含其它的模塊和嵌套包。
若是不一樣的人編寫的模塊名相同怎麼辦?爲了不模塊名衝突,Python又引入了按目錄來組織模塊的方法,稱爲包(Package)。
舉個例子,一個abc.py
的文件就是一個名字叫abc
的模塊,一個xyz.py
的文件就是一個名字叫xyz
的模塊。
如今,假設咱們的abc
和xyz
這兩個模塊名字與其餘模塊衝突了,因而咱們能夠經過包來組織模塊,避免衝突。方法是選擇一個頂層包名:引入了包之後,只要頂層的包名不與別人衝突,那全部模塊都不會與別人衝突
列:
有個abcd.py文件和 testa 同級目錄
導入包 testa的時候 實際上就是 在執行testa裏面的 __init__.py 這個文件
導入推薦寫法:
from testa import scla
from testa.scla import show
from testa.web1 import scla
from testa.web1.scla import show
from testa import web1 #執行__init__文件
web1.scla.show(1) #之前的python老版本這樣執行會報錯 ;新版本支持了
爲何在python 目錄找不到time模塊 sys模塊等 是由於C語言實現的內置到解釋器裏面的
import 是如何工做的:有以下2個文件
test.py裏面導入import scla文件的時候,會先執行一遍scla.py文件,而後吧scla.py文件的內容所有獲取過來給scla(也就是import scla)
執行結果:
sys.path路勁以下:能夠看出來了第一搜索路徑是當前目錄
['D:\\xxxx\\testa', 'D:\\Study', 'C:\\Program Files (x86)\\Python36-32\\python36.zip', 'C:\\Program Files (x86)\\Python36-32\\DLLs', 'C:\\Program Files (x86)\\Python36-32\\lib', 'C:\\Program Files (x86)\\Python36-32', 'C:\\Users\\Think\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages\\win32', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages\\win32\\lib', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages\\Pythonwin', 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.1\\helpers\\pycharm_matplotlib_backend']
importlib 使用
結果: