《head first python》— 函式定義、模組與釋出、共享程式碼

《head first python》— 函式定義、模組與釋出、共享程式碼

1.定義一個函式

假如一個函式已經發布,則升級時,為新新增的變數設定預設值的設定可以保證不同版本函式的相容。

def print_lol(the_list, indent=False, level=0, fh=sys.stdout):
"""
格式化輸出列表(包含巢狀和非巢狀列表),一次顯示一行,巢狀列表可以縮排
indent:是否縮排;level:tab縮排個數;fh為寫入檔案地址,預設顯示到螢幕
"""	
for each_item in the_list:
if isinstance(each_item, list):
print_lol(each_item,indent,level 1,fh)
else:
if indent:
for tab_stop in range(level):
print("\t", end='', file=fh)
print(each_item, file=fh)

2.函式轉化為模組

將函式儲存到一個適當命名的檔案中nester.py.

3.模組釋出

建立一個資料夾命名為nester,新建setup.py檔案,包含釋出的後設資料。首先從python釋出工具匯入“setup”函式

from distutils.core import setup
setup(
name			= 'nester',
version			='1.0.0',
py_modules		=['nester'],
auther			='a'
auther_email	='[email protected]'
description		=''
)

4.構建釋出

釋出工具將構建一個釋出所需的所有功能,開啟cmd命令列,定位到nester資料夾,輸入:C:\Python27\python.exe setup.py
sdist

螢幕上會出現一組狀態,確認釋出已經建立。將釋出安裝到Python本地副本。輸入:sudoC:\Python27\python.exe setup.py install

確認本地副本已經安裝,出現build和dist兩個資料夾。

釋出就緒。可以匯入模組並使用:import nester

5.上傳到PyPI共享

linux:python2.7 setup.py sdist upload

windows:C:\Python27\python.exe setup.py sdist upload

6.debug過程

import模組報錯,主要有以下錯因:

(1)漢字註釋。解決:開頭新增#coding: utf-8

(2)書上用python3,實際用python2.7.在同行輸出有問題

Python
2

print 'Python', python_version()
print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'print more text on the same line'
Python 2.7.6
Hello, World!
Hello, World!
text print more text on the same line

Python 3

print('Python', python_version())
print('Hello, World!')
print("some text,", end="") 
print(' print more text on the same line')
#結果
Python 3.4.1
Hello, World!
some text, print more text on the same line
print 'Hello, World!'
#報錯
File "<ipython-input-3-139a7c5835bd>", line 1
print 'Hello, World!'
^
SyntaxError: invalid syntax

(3)NameError:
name ‘sys’ is not defined解決:import sys程式碼更改為:

</pre><pre name="code" class="python">#coding: utf-8
import sys
def print_lol(the_list, indent=False, level=0, fh=sys.stdout):
"""
格式化輸出列表(包含巢狀和非巢狀列表),一次顯示一行,巢狀列表可以縮排
indent:是否縮排;level:tab縮排個數;fh為寫入檔案地址,預設顯示到螢幕
"""	
for each_item in the_list:
if isinstance(each_item, list):
print_lol(each_item,indent,level 1,fh)
else:
if indent:
for tab_stop in range(level):
file=fh
print "\t",;print file
file=fh
print(each_item, file)

匯入成功: