close

第五章、Py盒子:模組、套件與程式

  • 指定程式位於的資料夾

方法一:

41.PNG

※先將資料夾指定到自己設定的位置,我的資料夾位置式放在"C:/python"。之後輸入ipython進入python的交談式介面

方法二:

42.PNG

※先進去python交談式介面,使用import 匯入 os 模組,在os模組裡面有其中有兩個函式

  os.chdir為更換目錄,括號中的"r"讓後面的路徑不用使用反斜線跳脫字元。os.getcwd()則是取得執行時的工作目錄

  • 獨立的程式 

※建立一個名為test1.py的檔案,在裡面加入這一行程式

43.PNG

※使用run 來執行看看

44.PNG

  • 指令列引數

※建立一個名為test2.py的檔案,加入這兩行

45.PNG

※執行結果如下:

46.PNG

 

 

 

 

 

  • 模組與import陳述式

所謂模組(module)只是python的一個程式檔案。

要參考其他模組,我們要使用import陳述式,它可以讓你的程式--使用被匯入的模組裡面的程式與變數

  • 匯入模組

※接下來匯製作一個自訂模組,再用自己寫的程式匯入使用(兩個檔案需放在同一個目錄執行)

47.PNG

※首先是寫一個自訂模組。建立一個叫做report.py的檔案,再裡面寫一個自訂函式,隨機選取串列內的文字輸出

※random是一個python的模組,choice是裡面的一個函式,目的在隨機選擇項目

48.PNG

※再來是寫主程式。,建立一個叫做weatherman.py的檔案,在裡面import剛剛的自訂模組report,寫進主程式內容。以下為執行結果

49.PNG

※這個程式使用兩種不同的方法來使用import

主程式呼叫import report,接著執行report.get_description()

report.py裡面的get_description()函式呼叫from random import choice

接著執行return choice(possiblities)

  • 用其它名稱來匯入模組

※如果你有其他模組使用相同的名稱,或想使用更簡短或是幫助記憶的名稱時,可以用'別名'來匯入

50.PNG

51.PNG

  • 只匯入模組內你想要的東西

52.PNG

※匯入report裡面的get_description,並用do_it來暫時更名

53.PNG

  • 模組搜尋路徑

※Python要去哪裡找匯入的檔案?,它會使用sys標準模組的path變數內的一串目錄名稱串列,以及ZIP方式保存檔案

54.PNG

※一開始的空白是空字串。它你import時會先查看當前目錄,它會使用第一個找到的對像。

例如如果你新增一個模組叫做random,它的路徑的位置在標準程式之前,你就無法存取到標準程式庫的random了

 

 

 

  • 套件

從一行程式到多行程式,在到獨立程式,到同一個目錄下的多個模組。要擴充Python應用程式,可以將模組架構為"套件"

 

※以下程式會製作一個名為soures的目錄,在裡面有兩個模組,daily.py和weekly.py,每個模組裏面都有個名為forecast的函式

  每日的版本會回傳一個字串,每周的版本會回傳一個串列

※要在sources中放入一個__init__.py的檔案,它可以是空的,但有了它之後,Python才可以將容納它的目錄視為套件

55.PNG

※daily.py模組

56.PNG

※weekly.py模組

57.PNG

※主程式

58.PNG

※執行結果

 

  • Python標準程式庫

Python的主要訴求之一,就是它有"內建電池"── 一種大型的標準模組庫,可執行許多實用的工作

  • 用setdefault()與defaultdict()來處理遺漏的鍵

 

44.PNG

※當你用不存在的鍵來存取字典會產生一例外,可以用setdefault回傳一個預設值以免例外發生,但是如果鍵遺漏的話,他會指派一個項目給字典

45.PNG

※defaultdict()很類似,但它會在字典建立時,為任何新鍵指定預設值,它的引述是個函式,第一次我的傳入int函式,第二次則是自訂函式

※你可以使用其他函式來回傳這些類型預設的空白值,int()回傳0,list()回傳空串列[],dict回傳空字典{},如果你省略引數,則新建的初始值會被設為None

46.PNG

※可以直接使用lambda在呼叫式中定義預設的函式

47.PNG

※上述範例為製作一個計數器,由於defaultdict(int)預設值為0,所以food_count[food]迴圈計數時,不用歸零也不會發出例外

  • 用Counter()來計算項目數量

標準程式庫有一個計數器,除了ˊ 前的工作外,它也能做其他的工作

49.PNG

※上述為做出一個名為breakfast_count的計數器來計數breakfast,並操作它

※ most_common() 函式會以降冪回傳所有元素,或當你指定一個數量時,回傳最前面的count元素

50.PNG

※上述為做出一個名為lunch_count的計數器來計數lunch,再來將它與breakfast_count做結合。

※要注意的是聯集不會加總,而是選取數量較多的那個項目

  • 使用鍵與OrderedDict()來排序

51.PNG

  • 堆疊+序列 ==deque

簡單來說就是檢查回文,from collections import deque後 deque(字串),就能檢查該字串是否為回文(回文:從頭尾兩端開始字元都相同,直到中間)

  • 使用itertools來迭代程式結構

itertools有許多函式,特別是有些排列組合可以為你節省很多時間,以下舉例部分函式

52.PNG

53.PNG

 

  • 用pprint印出好看的結果

pprint()會試著排列元素,讓你更容易閱讀

54.PNG

 

  • 更多電池:取得其他的Python程式

有些標準程式庫沒有你要的東西,或沒有採用非常正確地的工作方式。

全世界都有開放的程式碼,第三方的Python軟體供你使用

以下為優秀的資源:

  • PyPi:(http://pypi.python.org)
  • github:(https://githhub.com/Python)
  • readthedocs(https://readthedocs.org/)

 

 

  • 練習題
  • 建立一個名為zoo.py的檔案。在裡面定義一個名為 hours()的函式

  ,用它來印出字串'Open 9-5 daily'。接著使用互動式解譯器來匯入 zoo 模組

   ,並呼出它的hours()函式 

55.PNG

56.PNG

 

  • 在互動式解譯器中,將zoo模組匯入名為menagerie,並呼叫它的hours()函式

57.PNG

  • 在互動式解譯器中,直接從zoo匯入hours()函式,並呼叫它

58.PNG

  • 在互動式解譯器中,將hours函式匯入為info,並呼叫它

59.PNG

  • 使用 鍵/值 對 'r':5、'a':1、'd':4、'b':2、與 'c':3 製作一個名為plain的字典,再將它印出

60.PNG

  • 用上題的 鍵/值 製作一個名為fancy的OrderedDict,並將它印出。觀察順序是否相同

61.PNG

  • 製作一名為dict_of_lists的default,並對它傳入引數列串列,製作串列dict_of_lists['a']

     並以一個函式指派,將'something for a'值指派給他,印出dict_of_lists['a']

62.PNG

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivankao 的頭像
    ivankao

    IvanKao的部落格

    ivankao 發表在 痞客邦 留言(0) 人氣()