Python(2):建立函式模組
說明:
在使用python的時候我們除了使用內建的函式之外,可能還需要使用一些別人寫的函式。或者我們寫的程式碼也希望可以給其他人使用。要實現這樣的功能,我們就需要按照下面的步驟來定義自己的模組:
Step1:新建一個py檔案
首先我們將前面一章所寫的列印列表的函式儲存為一個.py檔案,假設我這裡儲存為 kider.py。
1 """ 2 這是一個列印列表的函式,如果列表中有巢狀的列表也會展開列印出來 3 """ 4 def print_list(movies): 5 if isinstance(movies, list): 6 for movie in movies: 7 print_list(movie) 8 else: 9 print(movies)
kider.py
如果要釋出的話,最好將函式快程式碼新增上註釋。在python裡面,三引號 “”” 中的字串表註釋,這個是多行註釋 ,單行註釋使用 # 。
這時候如果想使用該模組,最原始的辦法是將前面的kider.py檔案放入到本機的python模組地址。
如何知道本機的python模組放在哪,只需在IDLE(python控制檯)中輸入:
import sys
sys.path
sys.path的輸出就是本機的python模組所在的檔案
1 >>> import sys 2 >>> sys.path 3 [``, `/usr/local/lib/python3.5/dist-packages/redis-2.10.5-py3.5.egg`, `/usr/lib/python35.zip`, `/usr/lib/python3.5`, `/usr/lib/python3.5/plat-x86_64-linux-gnu`, `/usr/lib/python3.5/lib-dynload`, `/home/zyq/.local/lib/python3.5/site-packages`, `/usr/local/lib/python3.5/dist-packages`, `/usr/lib/python3/dist-packages`]
modulePath
Step2:將py檔案作為模組安裝到本地
但其實我們不需要將自己寫的python模組放入本機的python模組地址,可以直接通過命令來安裝python模組到本機:
主要步驟如下:
》1.新建一個和準備安裝的python檔案同名的目錄,這裡取名為 kider,並且將前面的kider.py檔案放入該目錄下
》2. 在該目錄下建立一個setup.py檔案,並且編輯檔案的內容大致如下:
1 from distutils.core import setup 2 setup( 3 name = `kider`, 4 version = `1.0.0`, 5 py_modules = [`kider`], 6 author = `KiDe`, 7 author_email = `929557120@qq.com`, 8 url = `http://www.rampage.com`, 9 description = `KiDe`s first test module`, 10 )
setup.py
》3. 進入kider目錄,並且使用 python3 setup.py sdist 來進行編譯,編譯完成之後可以發現多了很多檔案和目錄
》4. 使用 sudo python3 setup.py install 命令安裝到本地的python模組。
》5. 接下來可以在程式中按如下方式使用python模組了:
1 import kider 2 movies = ["haha", [1, 2, "Ha"], "movie2"]; 3 kider.print_list(movies)
UseKider
為啥不能直接通過 print_list來使用剛剛釋出的python模組?
這是因為預設的在python shell中的名稱空間是 __main__, 如果想要使用print_list 因為他是屬於 kider 名稱空間的,所以應該帶上該名稱空間。
不過當然你也可以使用和setup.py中的同樣的語法,將名稱空間中的方法引入進來,這樣你就可以直接使用方法名: form kider import print_list
但是這樣存在一個風險,就是會覆蓋當前名稱空間的同名函式。
PS:注意到install之後其實在新生成的 __pycache__ 資料夾中多了一個 pyc檔案,該檔案可以當做是編譯後的class檔案,可以刪除,但是如果刪除,在執行的時候就可能損失掉對應的優化效能。
Step3:可選的把模組上傳到pypi
現在可以把模組上傳到pypi(python package index)上了:
》1. 首先需要去官網上註冊一個賬號 http://pypi.python.org
》2. python3 setup.py register 如果完成了第一步,那麼該步驟選則選項1, 否則其實該部也可以選擇2 進行直接新賬號建立註冊
》3. pyhton3 setup.py sdist upload 這一步進行將模組程式碼上傳
假設選擇了將程式碼上傳到高大上的pypi,那麼肯定需要對原來函式的功能進行改進,增加兩個引數,一個可以指定是否需要縮排,一個可以指定縮排時tab的個數。最終版本的程式碼如下:
1 """ this is KiDe`s python module """ 2 3 """ 這個函式列印傳入的引數,如果傳入的引數是一個列表,則會依次列印列表中的項。 4 支援多重巢狀的列表,會逐行依次列印出每一個巢狀列表中的所有子項。 5 """ 6 # 第一個引數是輸入的準備用來輸出的物件,第二個參數列示如果物件中有子列表是否對子項採用縮排,第三個參數列示如果採用縮排,縮排的tab數量 7 def print_list(args, level=0, indent=False): 8 if isinstance(args, list): 9 for arg in args: 10 print_list(arg, level+1, indent) 11 else: 12 if indent: 13 for tab_stop in range(level): 14 print(" ", end=``) 15 print(args)
kider.py
對於python指定了預設值的引數可以省略,比如可以直接指定第三個引數而不指定第二個引數的值,此時的呼叫方式如下:
1 >>> import kider 2 >>> kider.print_list([`aa`, `bb`, `cc`], indent=True) 3 aa 4 bb 5 cc
Invoke
黎明前最黑暗,成功前最絕望!
相關文章
- python threading模組有哪些函式Pythonthread函式
- 將函式儲存在模組中(2)函式
- 使用 Python 函式進行模組化Python函式
- python檢視模組下的函式Python函式
- Python如何將函式儲存在模組中Python函式
- python IO模組【二】:open函式詳解Python函式
- socket模組函式函式
- Python學習筆記_函式_匯入模組Python筆記函式
- Python檢視模組(變數、函式、類)方法Python變數函式
- No.7、函式模組函式
- 『無為則無心』Python函式 — 36、Python中的模組Python函式
- Python函式與模組的精髓與高階特性Python函式
- 藉助Python 函式進行模組化程式碼Python函式
- python將函式寫入模組中的小技巧Python函式
- python - 建立一個自定義模組Python
- Lua封裝函式模組並由其他模組呼叫封裝函式
- Python模組分析:第2節-hashlib加密模組Python加密
- re模組 函式模式詳解函式模式
- 從A到Z,26個實用Python模組/函式速覽Python函式
- 從零開始學Python:第八課-函式和模組Python函式
- python的os模組的常見函式及用途詳解Python函式
- python基礎7 - 函式2Python函式
- Python入門教程100天:Day06-函式和模組的使用Python函式
- Python 正規表示式 re 模組Python
- python re模組 正規表示式Python
- python正規表示式(re模組)Python
- python使用魔法函式建立可切片型別Python函式型別
- python例項建立銷燬的函式整理Python函式
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- python 系統函式呼叫sed分組Python函式
- python之matplotlib模組繪製常見的啟用函式及各啟用函式的優缺點Python函式
- 自定義生成器函式模擬Python內建函式filter()函式PythonFilter
- [轉載] python數學計算模組之math常用函式學習使用Python函式
- Python2 input函式漏洞利用Python函式
- Python 正規表示式模組詳解Python
- python2 traceback模組原始碼解析Python原始碼
- Python模組之urllib模組Python
- python模組之collections模組Python