Head First Python(分享你的程式碼)
共享你的程式碼
Python提供了一組技術,可以很容易地實現共享,這包括模組和一些釋出工具:
- 模組允許你合力組織程式碼來實現最優共享。(對模組的主要需求是要求檔名以.py結尾)
- 釋出工具允許你向全世界共享你的模組。
函式轉換為模組
1.把第一章中的程式碼存檔名為“nester.py”的檔案,程式碼如下
def print_lol(the_list): for each_item in the_list: if isinstance(each_item,list): print_lol(each_item)else: print(each_item)
2.註釋程式碼:"""三個引號就是註釋"""
#從這一點知道當前行末尾的所有內容都是註釋
3.在IDLE編輯視窗家在nester.py檔案,然後按下F5執行這個模組程式碼:
這時Python shell“會重啟”,出現一個帶有下面字串的提示視窗
=============RESTART==============
然後執行程式碼
movies=['The Holy Grail', 1975, "Terry Jones & Terry Gilliam",91,["Graham Chapman",["Michael Palin","John Cleese","Terry Gilliam","Eric Idle","Terry Jones"]]]
print_lol(movies)
現在我們開始準備釋出
1.為模組建立一個資料夾名為“nester”,然後吧nseter.py檔案複製到這個資料夾中
2.在新的資料夾中建立一個名為“setup.py”的檔案(文中的一些內容可自己更改)
from distutils.core import setup setup( name ='nester', version='1.0.0', py_modules =['nester'], author ='Your name', author_email='Your mail', url ='Your Website', descriptions='A simple printer of nested list', )
3.構建一個釋出檔案:在nester資料夾中打開個終端(cd到nester資料夾下,在cmd.exe進入D盤的方法是直接輸入D:),
win7下鍵入(python安裝目錄是D:\\Python33)
$D:\\Python33\python.exe setuo.py sdist
4.將釋出安裝到你的Python本地副本中。
$D:\\Python33\python.exe setup.py install
釋出已經就緒。
釋出預覽
安裝後會在nester資料夾下新建build和dist兩個資料夾,manifest和nester.pyc檔案
匯入模組並使用
要使用一個模組,只需把它匯入到你的程式中,或者倒入到IDLE shell:
import nester #使用from module import function可以從一個模組將函式專門匯入當前名稱空間
import nester movies=['The Holy Grail', 1975, "Terry Jones & Terry Gilliam",91,["Graham Chapman",["Michael Palin","John Cleese","Terry Gilliam","Eric Idle","Terry Jones"]]] nester.print_lol(movies)#模組實現名稱空間,點號將模組名稱空間與函式名分隔開。主Python程式的程式碼與__main__(前後兩個下劃線)的名稱空間關聯
#內建函式(built-in function,BIF)的名稱空間為__builtins__
或者在IDLE的編輯視窗中開啟你的程式,然後按下F5執行程式碼。
註冊PyPI
然後在郵箱確定
向PyPI上傳程式碼
在nester資料夾下開啟終端,輸入$D:\\Python33\python.exe setup.py register
輸入username和password,儲存登陸(可選)
開始上傳$python3 setup.py sdist upload(如果setup.py裡的name是nester是上傳不上的)
歡迎來到PyPI社群
完善nester,使它的顯示更有層次
def print_lol(the_list,level): """用來迭代顯示列表中的列表""" for each_item in the_list: if isinstance(each_item,list): print_lol(each_item,level+1) else: for tab_stop in range(level): print("\t", end=' ')#包含end=''作為print()的一個引數會關閉其預設行為(即在輸入中自動包含換行) print(each_item)
range() BIF可以提供你需要的控制來迭代指定的次數,而且可以用來生成一個從0直到(但不包含)某個數的數字列表以下是這個BIF的用法:
for num in range(4):
print(num)
顯示:
0,1,2,3
使用可選引數
修改def print_lol(the_list,level):→def print_lol(the_list,level=0):
增加一個預設值使得“level"變成一個可選的引數
新增是否縮排的開關
def print_lol(the_list,indent=False,level=0): """用來迭代顯示列表中的列表""" for each_item in the_list: if isinstance(each_item,list): print_lol(each_item,indent,level+1) else: if indent: for tab_stop in range(level): print("\t", end=' ') print(each_item)