零基礎學python之函數與模塊(附詳細的代碼和安裝發佈文件過程)

代碼重用——函數與模塊

摘要:構建函數,建立模塊,安裝發佈文件,安裝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’)

 

函數知識小結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))

 

安裝pytest和PEP 8插件

上文中咱們已經使用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

 

 

中間的提示目前來看暫且不用管,說路徑的問題。

確認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問題了。

小結PEP8:

  函數註釋的提示冒號以後須要一個空格;

  等號兩端須要空格;

  逗號以後須要空格;

  tab不如四個空格規範,多是編輯器的問題;

  最後須要一個空行;

  每一個函數前面要加兩個空行;

 

上期回顧:3結構化數據 http://www.javashuo.com/article/p-cftxhpmc-o.html

至此,內容就結束了,下期預告:構建web應用

相關文章
相關標籤/搜索