Python學(xué)習(xí)筆記(八)

第八章 程序設(shè)計(jì)方法論

人生苦短,請(qǐng)用Python疹鳄。
Life is short. You need Python.
學(xué)習(xí)目標(biāo)

  1. 了解計(jì)算思維的概念坯苹;
  2. 掌握自頂向下的設(shè)計(jì)方法犀农;
  3. 掌握自底向上的執(zhí)行過程;
  4. 了解計(jì)算生態(tài)和模塊編程思想硫眯;
  5. 掌握Python 第三方庫的安裝方法蕴侧;
  6. 掌握Python 源文件的打包方法。

計(jì)算思維

  • 計(jì)算思維是人類科學(xué)思維活動(dòng)的重要組成部分两入。人類在認(rèn)識(shí)世界净宵、改造世界過程中表現(xiàn)出三種基本的思維特征:
    • 以實(shí)驗(yàn)和驗(yàn)證為特征的實(shí)證思維,以物理學(xué)科為代表;
    • 以推理和演繹為特征的邏輯思維择葡,以數(shù)學(xué)學(xué)科為代表紧武;
    • 以設(shè)計(jì)和構(gòu)造為特征的計(jì)算思維,以計(jì)算機(jī)學(xué)科為代表敏储。
  • 計(jì)算思維是計(jì)算機(jī)科學(xué)發(fā)展到一定程度而提出的阻星,它是人類逐漸意識(shí)到計(jì)算機(jī)解決問題的強(qiáng)大能力后而自然產(chǎn)生的思維模式,具有顯著的時(shí)代特性已添。
  • 程序設(shè)計(jì)是實(shí)踐計(jì)算思維的重要手段
  • 抽象實(shí)際問題的計(jì)算特性妥箕,利用計(jì)算機(jī)去求解
  • 計(jì)算思維的本質(zhì) 是抽象(Abstraction)和自動(dòng)化(Automation)。
  • 在程序設(shè)計(jì)范疇更舞,計(jì)算思維主要反映在理解問題的計(jì)算特性畦幢、將計(jì)算特性抽象為計(jì)算問題、通過程序設(shè)計(jì)語言實(shí)現(xiàn)問題的自動(dòng)求解等幾個(gè)方面缆蝉。

實(shí)例:體育競(jìng)技分析

這是一個(gè)模擬體育競(jìng)技并進(jìn)行競(jìng)技分析的實(shí)例宇葱。

  • 從各種球類比賽中抽象一般規(guī)則,規(guī)則定義如下:
  • 兩個(gè)球員在一個(gè)有四面邊界的場(chǎng)地上用球拍擊球返奉。開始比賽時(shí)贝搁,其中一個(gè)球員首先發(fā)球。接下來球員交替擊球芽偏,直到可以判定得分為止雷逆,這個(gè)過程稱為回合。當(dāng)一名球員未能進(jìn)行一次合法擊打時(shí)污尉,回合結(jié)束膀哲。未能打中球的球員輸?shù)暨@個(gè)回合。
  • 如果輸?shù)暨@個(gè)回合的是發(fā)球方被碗,那么發(fā)球權(quán)交給另一方某宪;如果輸?shù)舻氖墙忧蚍剑瑒t仍然由這個(gè)回合的發(fā)球方繼續(xù)發(fā)球锐朴⌒宋梗總之,每回合結(jié)束焚志,由贏得該回合的一方發(fā)球衣迷。球員只能在他們自己的發(fā)球局中得分。首先達(dá)到15 分的球員贏得一局比賽酱酬。
  • 在計(jì)算機(jī)模擬中壶谒,運(yùn)動(dòng)員的能力級(jí)別將通過發(fā)球方贏得本回合的概率來表示。因此膳沽,一個(gè)0.6 概率的球員可以在他的發(fā)球局有百分之六十的可能性贏得1 分汗菜。程序首先接收兩個(gè)球員的水平值让禀,然后通過利用這個(gè)值采用概率方法模擬多場(chǎng)比賽。程序最后會(huì)輸出比賽運(yùn)行結(jié)果陨界。
  • 該問題的IPO 模式如下:
    • 輸入:兩個(gè)球員(球員A 和B)的能力概率巡揍,模擬比賽的場(chǎng)次;
    • 處理:模擬比賽過程普碎;
    • 輸出:球員A 和B 分別贏得球賽的概率
  • 抽象這個(gè)問題時(shí)吼肥,將球員失誤、犯規(guī)等可能性一并考慮在能力概率中麻车,在每局比賽中缀皱,球員A 先發(fā)球。一個(gè)期望的輸出結(jié)果如下
    • 模擬比賽數(shù)量:500
    • 球員A 獲勝場(chǎng)次:268(53.6%)
    • 球員B 獲勝場(chǎng)次:232(46.4%)

將結(jié)合這個(gè)例子介紹自頂向下的設(shè)計(jì)方法和自底向上的執(zhí)行方法动猬。

自頂向下設(shè)計(jì)

程序需要采用自頂向下設(shè)計(jì)方法啤斗,采用自底向上的執(zhí)行過程。

  • 以一個(gè)總問題開始赁咙,試圖把它表達(dá)為很多小問題組成的解決方案钮莲。再用同樣的技術(shù)依次攻破每個(gè)小問題,最終問題變得非常小彼水,以至于可以很容易解決崔拥。然后只需把所有的碎片組合起來,就可以得到一個(gè)程序
  • 自頂向下設(shè)計(jì)中最重要的是頂層設(shè)計(jì)凤覆。
  • 以體育競(jìng)技分析為例链瓦,可以從問題的IPO描述開始。大多數(shù)程序都可以簡(jiǎn)單將IPO 描述直接用到程序結(jié)構(gòu)設(shè)計(jì)中盯桦,體育競(jìng)技分析從用戶得到模擬參數(shù)模擬比賽慈俯,最后輸出結(jié)果。

頂層設(shè)計(jì)

  • 步驟1: 打印程序的介紹性信息拥峦;
  • 步驟2:獲得程序運(yùn)行需要的參數(shù):probA, probB, n贴膘;
  • 步驟3:利用球員A 和B 的能力值probA 和probB,模擬n 次比賽略号;
  • 步驟4:輸出球員A 和B 獲勝比賽的場(chǎng)次及概率刑峡。

結(jié)合體育競(jìng)技實(shí)例介紹了自頂向下的設(shè)計(jì)過程。從問題輸入輸出確定開始玄柠,整體設(shè)計(jì)逐漸向下進(jìn)行氛琢。每一層以一個(gè)大體算法描述,然后逐步細(xì)化成代碼随闪,細(xì)節(jié)被函數(shù)封裝

設(shè)計(jì)過程總結(jié)

  • 步驟1:將算法表達(dá)為一系列小問題;
  • 步驟2:為每個(gè)小問題設(shè)計(jì)接口骚勘;
  • 步驟3:通過將算法表達(dá)為接口關(guān)聯(lián)的多個(gè)小問題來細(xì)化算法铐伴;
  • 步驟4:為每個(gè)小問題重復(fù)上述過程撮奏。

自底向上執(zhí)行

  • 開展測(cè)試的更好辦法也是將程序分成小部分逐個(gè)測(cè)試
  • 執(zhí)行中等規(guī)模程序的最好方法是從結(jié)構(gòu)圖最底層開始,而不是從頂部開始当宴,然后逐步上升畜吊。或者說户矢,先運(yùn)行和測(cè)試每一個(gè)基本函數(shù)玲献,再測(cè)試由基礎(chǔ)函數(shù)組成的整體函數(shù),這樣有助于定位錯(cuò)誤

pyinstaller 庫的使用

pyinstaller 是將Python 語言腳本(.py 文件)打包成Windows梯浪、Linux捌年、Mac OS X 等操作系統(tǒng)下可執(zhí)行文件的第三方庫
PyInstaller是一個(gè)十分有用的第三方庫,它能夠在Windows挂洛、Linux礼预、Mac OS X 等操作系統(tǒng)下將Python源文件打包,通過對(duì)源文件打包虏劲,Python程序可以在沒有安裝Python的環(huán)境中運(yùn)行托酸,也可以作為一個(gè)獨(dú)立文件方便傳遞和管理。
PyInstaller 需要在命令行(控制臺(tái))下用pip 工具安裝:

:\>pip install pyinstaller  或者
:\>pip3 install pyinstaller

PyInstaller 的官方網(wǎng)站網(wǎng)址為 http://www.pyinstaller.org/
PyInstaller庫會(huì)自動(dòng)將pyinstall 命令安裝到Python 解釋器目錄中柒巫,與pip 或pip3命令路徑相同励堡,因此可以直接使用。
使用PyInstaller 庫十分簡(jiǎn)單堡掏,在Windows 平臺(tái)的命令行中輸入Python 源文件名稱应结,可以使用相對(duì)路徑或絕對(duì)路徑

:\>pyinstaller dpython.py
或
:\>pyinstaller D:\codes\dpython.py

執(zhí)行完畢后,源文件所在目錄將生成dist和build 兩個(gè)文件夾布疼。其中摊趾,build 目錄是pyinstaller存儲(chǔ)臨時(shí)文件的目錄,可以安全刪除游两。最終的打包程序在dist內(nèi)部的dpython目錄中砾层。目錄中其他文件是可執(zhí)行文件dpython.exe 的動(dòng)態(tài)鏈接庫
可以通過‐F 參數(shù)對(duì)Python 源文件生成一個(gè)獨(dú)立的可執(zhí)行文件,如下:

:\>pyinstaller -F dpython.py

執(zhí)行后在dist 目錄中出現(xiàn)了dpython.exe 文件贱案,沒有任何依賴庫肛炮,執(zhí)行它即可。
使用PyInstaller 庫需要注意以下問題:

  • 文件路徑中不能出現(xiàn)空格和英文句號(hào)(.)宝踪;
  • 源文件必須是UTF‐8 編碼侨糟,暫不支持其他編碼類型。采用IDLE 編寫的源文件都保存為UTF‐8 編碼形式瘩燥,可直接使用秕重。

pyinstall 命令不需要在Python 源文件中增加代碼,只需要通過命令行進(jìn)行打包即可厉膀。‐F 參數(shù)最為常用溶耘,對(duì)于包含第三方庫的源文件二拐,可以使用‐p 添加第三方庫所在路徑。如果第三方庫由pip 安裝且在Python 環(huán)境目錄中凳兵,則不需要使用‐p 參數(shù)百新。

#練習(xí)打包以前的練習(xí)程序

計(jì)算生態(tài)和模塊編程

Python 語言有9萬多個(gè)第三方庫,形成了龐大的計(jì)算生態(tài)庐扫,模塊編程思想是Python 語言最大的價(jià)值

Python的計(jì)算生態(tài)

  • Python 語言從誕生之初致力于開源開放饭望,建立了全球最大的編程計(jì)算生態(tài)。
  • Python 官方網(wǎng)站提供了第三方庫索引功能:https://pypi.python.org/pypi
  • 該頁面列出了Python 語言9 萬多個(gè)第三方庫的基本信息形庭,這些函數(shù)庫覆蓋信息領(lǐng)域技術(shù)所有技術(shù)方向铅辞。這里需要說明,Python 語言的函數(shù)庫并非都采用Python 語言編寫碘勉。

膠水語言

由于Python 有非常簡(jiǎn)單靈活的編程方式巷挥,很多采用C、C++等語言編寫的專業(yè)庫可以經(jīng)過簡(jiǎn)單的接口封裝供Python 語言程序調(diào)用验靡。這樣的粘性功能使得Python 語言成為了各類編程語言之間的接口倍宾,俗稱Python 語言為“膠水語言”。

第三方庫

  • Python第三方程序包括庫(library)胜嗓、模塊(module)高职、類(class)和程序包(Package)等多種命名
  • 統(tǒng)一將這些可重用代碼統(tǒng)稱為“庫”。
  • Python 內(nèi)置的庫稱為標(biāo)準(zhǔn)庫辞州,其他庫稱為第三方庫
  • 在計(jì)算生態(tài)思想指導(dǎo)下怔锌,編寫程序的起點(diǎn)不再是探究每個(gè)具體算法的邏輯功能和設(shè)計(jì),而是盡可能利用第三方庫進(jìn)行代碼復(fù)用变过,探究運(yùn)用庫的系統(tǒng)方法埃元。
  • 這種像搭積木一樣的編程方式,稱為“模塊編程”
  • 每個(gè)模塊可能是標(biāo)準(zhǔn)庫媚狰、第三方庫岛杀、用戶編寫的其他程序或?qū)Τ绦蜻\(yùn)行有幫助的資源等。

Python 第三方庫的安裝

  • 第三方庫需要安裝后才能使用崭孤。由于Python 語言經(jīng)歷了版本更迭過程类嗤,而且,第三方庫由全球開發(fā)者分布式維護(hù)辨宠,缺少統(tǒng)一的集中管理遗锣,因此,Python的第三方庫曾經(jīng)一度制約了Python 語言的普及和發(fā)展嗤形。隨著官方pip 工具的應(yīng)用精偿,Python 第三方庫的安裝變得十分容易。
  • Python 第三方庫依照安裝方式靈活性和難易程度有三個(gè)方法,建議讀者依次使用还最,能夠?qū)⒌谌綆彀惭b成功墓阀,
  • 這三個(gè)方法是:pip 工具安裝、自定義安裝和文件安裝拓轻。

pip 工具安裝

  • 最常用且最高效的Python第三方庫安裝方式是采用pip工具安裝。
  • pip是Python官方提供并維護(hù)的在線第三方庫安裝工具经伙。
  • 對(duì)于同時(shí)安裝Python 2 和Python 3 環(huán)境的系統(tǒng)扶叉,建議采用pip3 命令專門為Python 3 版本安裝第三方庫。
  • pip 是Python 內(nèi)置命令帕膜,需要通過命令行執(zhí)行枣氧,執(zhí)行pip -h 命令將列出pip 常用的子命令,注意垮刹,不要在IDLE 環(huán)境下運(yùn)行pip 程序达吞。
  • pip 支持安裝(install)、下載(download)荒典、卸載(uninstall)酪劫、列表(list)、查看(list)寺董、查找(search)等一系列安裝和維護(hù)子命令覆糟。
  • 安裝一個(gè)庫的命令格式如下,例如:
pip install <擬安裝庫名>
  • 例如遮咖,安裝pygame 庫滩字,pip 工具默認(rèn)從網(wǎng)絡(luò)上下載pygame 庫安裝文件并自動(dòng)安裝到系統(tǒng)中。
pip install pygame
  • 使用-U 標(biāo)簽可以更新已安裝庫的版本御吞,例如麦箍,用pip 更新本身:
pip install -U pip
  • 卸載一個(gè)庫的命令格式如下,例如:
pip uninstall <擬卸載庫名>
  • 可以通過list 子命令列出當(dāng)前系統(tǒng)中已經(jīng)安裝的第三方庫陶珠,例如:
pip list
  • pip 是Python 第三方庫最主要的安裝方式挟裂,可以安裝超過90%以上的第三方庫。然而背率,由于一些歷史话瞧、技術(shù)和政策等原因,還有一些第三方庫無法暫時(shí)用pip 安裝寝姿,此時(shí)交排,需要其他的安裝方法

自定義安裝

文件安裝

對(duì)于上述三種安裝方式,一般優(yōu)先選擇采用pip 工具安裝饵筑,如果安裝失敗埃篓,則選擇自定義安裝或者文件安裝(Windows 平臺(tái))。另外根资,如果需要在沒有網(wǎng)絡(luò)條件下安裝Python 第三方庫架专,請(qǐng)直接采用文件安裝方式同窘。其中,.whl 文件可以通過pip download 指令在有網(wǎng)絡(luò)條件的情況下獲得部脚。

實(shí)例:pip 安裝腳本

這是一個(gè)用pip 安裝第三方庫的例子

pip 安裝腳本

  • 實(shí)例16共需要安裝20個(gè)第三方Python 庫
  • 需要注意想邦,庫名是第三方庫常用的名字,pip 安裝用的名字和庫名不一定完全相同委刘,建議采用小寫字符
  • 安裝過程請(qǐng)?jiān)谙到y(tǒng)命令行下進(jìn)行丧没,不在IDLE 中,部分庫會(huì)依賴其他函數(shù)庫锡移,pip會(huì)自動(dòng)安裝呕童,部分庫下載后需要一個(gè)安裝過程,pip 也會(huì)自動(dòng)執(zhí)行淆珊。成功安裝庫后會(huì)出現(xiàn)” Successfully installed…”提示

pip 批量安裝Python 庫

如果讀者希望自動(dòng)安裝這些庫夺饲,可以使用Python 標(biāo)準(zhǔn)庫os 的system()函數(shù)調(diào)用控制臺(tái)。
下面給出采用pip 批量安裝Python 庫的方法施符。

#批量安裝Python庫的程序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末往声,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子操刀,更是在濱河造成了極大的恐慌烁挟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骨坑,死亡現(xiàn)場(chǎng)離奇詭異撼嗓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)欢唾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門且警,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人礁遣,你說我怎么就攤上這事斑芜。” “怎么了祟霍?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵杏头,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我沸呐,道長(zhǎng)醇王,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任崭添,我火速辦了婚禮寓娩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己棘伴,他們只是感情好寞埠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焊夸,像睡著了一般仁连。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阱穗,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天怖糊,我揣著相機(jī)與錄音,去河邊找鬼颇象。 笑死,一個(gè)胖子當(dāng)著我的面吹牛并徘,可吹牛的內(nèi)容都是我干的遣钳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼麦乞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蕴茴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起姐直,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤倦淀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后声畏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞叽,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年插龄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愿棋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡均牢,死狀恐怖糠雨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徘跪,我是刑警寧澤甘邀,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站垮庐,受9級(jí)特大地震影響松邪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜突硝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一测摔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦锋八、人聲如沸浙于。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羞酗。三九已至,卻和暖如春紊服,著一層夾襖步出監(jiān)牢的瞬間檀轨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工欺嗤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留参萄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓煎饼,卻偏偏與公主長(zhǎng)得像讹挎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吆玖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容