摘要:構建函數,建立模塊,安裝發佈文件,安裝pytest和PEP 8插件,確認PEP8兼容性以及糾錯html
重用代碼是構建一個可維護系統的關鍵。python
代碼組是Python中對塊的叫法。web
對以前的vowels代碼功能建立一個函數名爲search_for_vowels( )shell
在函數調用時結果:數據結構
Bool內置函數,提供某個值時它會返回這個值計算爲true仍是false框架
任何非空的數據結構都是true。編輯器
int(字符串,基數):將數字字符串以基數形式轉爲整數十進制。函數
int(浮點數):將浮點數轉爲整數十進制。工具
hex(整數):將十進制轉爲16進制學習
oct(整數):將十進制轉爲8進制
bin(整數):將十進制轉爲2進制
pow(底數,冪):計算底數的冪
abs(實數):求絕對值
float(實數):將數字轉爲浮點數
sum()min()max()
len(序列):求序列的長度
chr(整數):獲取ASCII編號的字符
ord(字符串):獲取單個字符的ASCII編號
range(整數):產生一組連續的數字
input()print()
str(序列):將序列轉化爲字符串
set(序列):將序列轉化爲集合
list(序列):將序列轉化爲列表
tuple(序列):將序列轉化爲字典
在參數後加:str 表示但願參數是一個字符串
第二行後面添加了一些內容,->set表示這個函數會返回一個集合。
在IDLE編輯窗口使用help(函數名)來查看函數的註釋和註解。
ü 函數是命名的代碼塊。
ü def關鍵字用來命名函數,函數代碼在def關鍵字下縮進。
ü Python中’’’能夠用來增長多行註釋。
ü 函數能夠接受任意多個命名參數,也能夠沒有參數。
ü Return語句容許函數返回任意多個值(也能夠不返回任何值)。
ü 函數註解能夠用來描述函數參數的類型以及函數的返回類型。
如今函數的版本以下:
def search_for_vowels(word:str)->set:
'''FUNC:display any vowels found in an asked-for word.'''
vowels=set('aeiou')
return vowels.intersection(set(word))
創建一個通用的函數:容許用戶指定要搜索的字母集合,而不老是使用五個元音。
PEP8建議全部頂層函數上下都有兩個空行,這是一些默認的規定,便於程序的可讀。
def search_for_letters(phrase:str,letters:str='aeiou')->set:
'''FUNC:return a set of 'letters' found in 'phrase' . '''
return set(letters).intersection(set(phrase))
#set(letters),從letters中建立一個集合對象。
#intersection是取兩個集合中的交集。
#最後利用return語句將這個交集操做的結果返回給調用代碼。
#letters:str='aeiou'是給letters提供一個默認值,不指定時使用aeiou
關於賦值:
在shell界面調用時輸入:函數名(‘參數1’,‘參數2’)
這是位置賦值,根據函數定義時的順序進行賦值。
關鍵字賦值時不須要保持順序:
函數名(關鍵字1=‘參數1’,關鍵字2=‘參數2’)
ü 函數能夠隱藏複雜性,能夠把一行復雜的代碼抽象成一個簡單的函數使用。
ü 任何函數均可以在def行賦一個默認值。
ü 賦值時有兩種方法,不指定關鍵字時按照順序賦值。
建立模塊
首先建一個文件夾mymodules,而後把剛纔的文件放在裏面,
導入模塊直接調用便可
必須切換到模塊的目錄下,才能夠導入模塊,若是目錄有誤或無該模塊,會報錯。
如今給window上建立一個發佈文件:
首先給文件夾mymodules中須要三個文件
Setup.py中:
README.txt爲空文件便可。
vsearch.py中:
而後在命令提示符中切換到該目錄下而後輸入python setup.py sdist:
切換使用cd + 路徑
python setup.py sdist
最後的結果表示一切正常,如今三個文件已經合併到一個發佈文件中,這是一個可安裝的文件,包含了模塊的源代碼,名爲vsearch-1.0.tar.gz,在剛纔的文件夾裏已經建立了一個叫dist文件夾,
下來安裝發佈文件:
python -m pip install vsearch-1.0.tar.gz
ü 模塊就是將一個或多個函數保存在文件中。
ü 將模塊安裝到site-packages,將容許導入模塊並使用模塊中的函數,而不論當前的工做目錄。
記得以前提到過的PEP 8插件,這是一個用來檢查Python代碼編碼規範的工具,當符合這個原則時,則證實咱們的代碼更加的標準,可讀性和兼容性也更強,如果每一個人對於同一個功能的代碼差距很是大,那麼就不是咱們學習Python的初衷了,標準化有不少好處。
回顧以前的vsearch.py代碼:(我刪除了後面的#開頭的註釋)
def search_for_vowels(phrase:str)->set: '''FUNC:display any vowels found in an asked-for word.''' vowels=set('aeiou') return vowels.intersection(set(phrase)) def search_for_letters(phrase:str,letters:str)->set: '''FUNC:return a set of 'letters' found in 'phrase' . '''
return set(letters).intersection(set(phrase))
上文中咱們已經使用pip工具把vsearch.py模塊安裝到計算機的Python解釋器中。Pip工具還能夠用來爲解釋器安裝第三方代碼。
如今使用pip安裝pytest測試框架和PEP 8插件:
搜索cmd.exe右鍵使用管理員身份運行
py -3 -m pip install pytest
通過一番安裝以後,系統提示pip版本有些低,因此根據提示更新pip:
python -m pip install --upgrade pip
更新完成:
下來安裝PEP8插件:
python -m pip install pytest-pep8
中間的提示目前來看暫且不用管,說路徑的問題。
下來從從新打開一個命令提示符,切換到vsearch.py所在的目錄下,個人路徑在桌面
文件裏的內容是:
這個相信不陌生吧,就是以前建立模塊的那個文件夾。
下來檢查咱們代碼的兼容性:
py.test --pep8 vsearch.py
好像報了不少的錯誤,看來咱們本身編寫的代碼是不符合兼容性要求的,下來針對每一個問題進行分析。
第一個錯誤是:2:29 missing whitespace after ‘:’
也就是說在:以後須要加一個空格。
查看以前的代碼
錯誤提示的2:29是第二行第29個字符也就是圖中標註的位置以後缺乏一個空格,我把相似的位置後面的空格都補充上。又檢查了一遍。
第二個錯誤是:3:1 indentation contains tabs
tab有問題,刪了那個tab(後面提到,這個辦法是有問題的)
第三個錯誤:4:1 也多了一個tab
第四個錯誤:4:8 missing whitespace around operator
指到了那個等號,看來等號兩端須要加空格。
後 面的問題是:逗號以後也須要加空格。最後面須要加一個空行。
出了一個問題:修正了全部的錯誤還有問題,就是tab鍵的問題,如今程序是這樣:
def search_for_vowels(phrase: str)->set: '''FUNC:display any vowels found in an asked-for word.''' vowels = set('aeiou') return vowels.intersection(set(phrase)) def search_for_letters(phrase: str, letters: str)->set: '''FUNC:return a set of 'letters' found in 'phrase' . '''
return set(letters).intersection(set(phrase))
報的錯誤是這樣:
說的都是一個內容,我想是否是TAB鍵的空格數不符合兼容性要求呢?
百度上說把tab換成四個空格,終於好了!
這下變綠了(哈哈)也便是說,如今這個代碼不存在PEP8問題了。
函數註釋的提示冒號以後須要一個空格;
等號兩端須要空格;
逗號以後須要空格;
tab不如四個空格規範,多是編輯器的問題;
最後須要一個空行;
每一個函數前面要加兩個空行;
上期回顧:3結構化數據 http://www.javashuo.com/article/p-cftxhpmc-o.html
至此,內容就結束了,下期預告:構建web應用