1. 程式人生 > >15_Python模塊化編程_Python編程之路

15_Python模塊化編程_Python編程之路

生效 pac 常用 測試 轉義 div 交互 clas 如果

技術分享圖片

之前跟大家講的是一些python的數據基礎,從這篇文章開始,我們開始正式學習python的模塊化編程

下面我們解釋一下什麽叫做模塊

之前已經講過怎麽去定義一個方法,如果你是用python交互器(自帶交互器,或者是ipython)來學習定義方法的話,你定義完方法後,然後退出交互器,然後你再來使用這個方法,很顯然,是不會成功調用的,這是因為python交互器在你退出後,會清空內存,所有定義的變量和方法都會被清理

如果你想把定義好的方法用在你的新腳本文件中,這樣就必須引入一種模塊機制

你可以把你寫好的python代碼保存到一個文件中(當然是以" .py "結尾的文件), 那麽這樣你就可以長久的使用這個代碼中的方法和變量

一個新文件想要使用之前保存好的文件的方法,就必須通過import方法導入這個文件

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‘]

  

上面的使用根據具體情況而定

自己定義模塊

之前在講定義方法的時候講到了斐波那契數列,這一次,我們還是用他做例子

首先在文本編輯器中寫下這幾段代碼

技術分享圖片

  保存為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__是一個系統變量,他可以顯示當前函數執行過程中的名稱

簡單來說__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

15_Python模塊化編程_Python編程之路