1. 程式人生 > >Head First Python(分享你的程式碼)

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)