以前跟你們講的是一些python的數據基礎,從這篇文章開始,咱們開始正式學習python的模塊化編程python
以前已經講過怎麼去定義一個方法,若是你是用python交互器(自帶交互器,或者是ipython)來學習定義方法的話,你定義完方法後,而後退出交互器,而後你再來使用這個方法,很顯然,是不會成功調用的,這是由於python交互器在你退出後,會清空內存,全部定義的變量和方法都會被清理編程
若是你想把定義好的方法用在你的新腳本文件中,這樣就必須引入一種模塊機制app
你能夠把你寫好的python代碼保存到一個文件中(固然是以" .py "結尾的文件), 那麼這樣你就能夠長久的使用這個代碼中的方法和變量編輯器
一個新文件想要使用以前保存好的文件的方法,就必須經過import方法導入這個文件模塊化
import的方法是用來作模塊導入的,他主要有如下幾種使用形式函數
In [1]: import sys In [2]: sys.path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
In [1]: from sys import path In [2]: path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
from 後面接模塊名,import後面接具體的方法,能夠接多個,用逗號隔開便可學習
In [1]: from sys import * In [2]: path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
上面的使用根據具體狀況而定測試
以前在講定義方法的時候講到了斐波那契數列,這一次,咱們仍是用他作例子blog
首先在文本編輯器中寫下這幾段代碼ip
保存爲fibo.py
而後咱們繼續在這個目錄打開python交互器
In [1]: import fibo In [2]: fibo.fib(200) 0 1 1 2 3 5 8 13 21 34 55 89 144 In [3]: fibo.fib2(200) Out[3]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
能夠直接導入以前寫好的python代碼,調用裏面寫好的方法
__name__是一個系統變量,他能夠顯示當前函數執行過程當中的名稱
簡單來講__name__就是全局的模塊名稱
例如上面那個例子
In [1]: import fibo In [2]: fibo.fib(200) 0 1 1 2 3 5 8 13 21 34 55 89 144 In [3]: fibo.fib2(200) Out[3]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] In [4]: fibo.__name__ Out[4]: 'fibo'
在後面咱們會常常用到這樣一個表達式
if __name__ = __main__:
全局代碼都寫在這行代碼的後面,也就是說,在執行代碼的時候會首先判斷是否是在本地執行的,簡單來講,他保證了你的代碼只能在你的文件中運行
接下來咱們要講到的這個就很是重要了,在以前咱們添加的python文件和導入模塊都是在同一個目錄進行的,因此會成功執行
可是若是咱們要導入其餘路徑的python文件,這就有點麻煩了
首先咱們要熟悉一個命令
In [1]: import sys In [2]: sys.path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
以前屢次使用過的命令
這個命令會顯示全部的python模塊的位置,以一個列表返回,通俗一點來說,就是python解釋器會去這些路徑去尋找python的文件,也就每一個模塊
好比numpy這個模塊文件的路徑
若是咱們要添加本身的模塊到路徑中,就可使用append方法(前面說過sys.path是一個列表)
例以下面這行代碼
In [5]: sys.path.append("E:\\Python-project\\Python-project\\module_study") In [6]: sys.path Out[6]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython', 'E:\\Python-project\\Python-project\\module_study']
注意在輸入路徑時要注意轉義字符,路徑已經成功加入到了列表中了
下面咱們測試有沒有成功生效,仍是導入咱們以前定義的斐波那契數列的代碼
首先隨便進入一個目錄,好比進入C盤
而後再進入python交互器
In [7]: import fibo In [8]: fibo.fib(200) 0 1 1 2 3 5 8 13 21 34 55 89 144 In [9]: fibo.fib2(200) Out[9]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] In [10]: fibo.__name__ Out[10]: 'fibo'
能夠成功導入
關於模塊簡單的就是這些,多練才能孰能生巧
官方博客 www.susmote.com