【筆記】《程序設(shè)計導(dǎo)論Python語言實踐》

2017年10月6日
終于算完了,趁著十一草草看完峦嗤,性價比不高不低吧蕊唐,有些困惑的問題得到了解決所以還是很值得的,尤其是可變變量那塊烁设。數(shù)據(jù)結(jié)構(gòu)和算法一章最為粗糙刃泌,計劃換本專門的書看。


記錄一些程序設(shè)計/Python中的新知識或比較重要的理念

目錄

  • 基本元素
  • 函數(shù)和模塊
  • 面向?qū)ο蟮某绦蛟O(shè)計
  • 算法和數(shù)據(jù)結(jié)構(gòu)

第一章 程序設(shè)計的基本原色

1.控制臺中運行Python文件

運行無輸入的Python文件
sys.argv[1]作輸入
input作輸入

2.Python程序開發(fā)流程

Python程序開發(fā)流程

3.使用分號(;)可以在一行書寫多條語句,不建議使用
4.SyntaxError:編譯錯誤
5.數(shù)據(jù)類型:一種數(shù)據(jù)類型是一系列值以及為這些值定義的一系列操作方法的集合
6.字面量(Literal)_數(shù)據(jù)類型的值耙替;標識符(Identifier)大小寫敏感;常量(Constant variable)約定全大寫
7.Python中所有的數(shù)據(jù)都表示為對象及對象之間關(guān)系
8.+號連接字符串進行字符串拼接
9.數(shù)據(jù)類型顯示變換:str(),int(),float()
10.Python賦值過程中的綁定關(guān)系2芴濉K咨取!【后邊的列表更為明顯】

Paste_Image.png

11.Python語言中箕别,int的取值范圍可以為任意大
12.優(yōu)先級:算數(shù)>比較>布爾铜幽;not>and>or
13.math.log()默認底數(shù)為自然常數(shù)e
14.Python內(nèi)部采用Unicode編碼存儲
15.Python用三個引號表示多行字符串
16.Python的余數(shù)和被除數(shù)同號,實現(xiàn)b*(a//b)+a%b==a

負數(shù)除/余

17.應(yīng)當避免比較兩個浮點數(shù)的相等性
18.round()函數(shù)做四舍五入串稀。實際上是四舍六入五成雙
19.id(a);type(a);repr(a);分別取地址除抛、類型和值
20.Python支持任意長度的鏈式比較運算、任意長度的鏈式賦值語句
21.Python語言中母截,語句塊取決于縮進的空白字符的個數(shù)到忽,通常采用4個空格縮進
22.i+=1 √
23.應(yīng)用實例:①調(diào)和數(shù)計算;②牛頓法求平方根清寇;③數(shù)制轉(zhuǎn)換喘漏;④蒙特卡洛模擬;⑤整數(shù)的因子分解华烟;
24.多行書寫:括號內(nèi)直接換行翩迈;無括號行位加反斜杠

多行書寫

25.Python支持break,continue,pass;不支持switch,goto盔夜;【path用于限制是否“通過”繼續(xù)執(zhí)行】
26.while可以實現(xiàn)任何循環(huán)负饲,for語句只能實現(xiàn)固定計數(shù)的循環(huán)
27.數(shù)據(jù)結(jié)構(gòu):是一種用于計算機程序處理的數(shù)據(jù)組織方式
28.“差一錯誤”(off-by one error),表示因數(shù)組索引從0開始而引起的超出索引錯誤
29.別名:當兩個變量指向同一個對象時喂链,則互為“別名”
簡單說即——x返十、y引用同一個數(shù)組,x修改數(shù)組衩藤,則y也會改變

別名

30.數(shù)組的復(fù)制操作——數(shù)組切片吧慢。y=x[:],簡潔赏表,開銷大
31.數(shù)組的4個核心操作:創(chuàng)建數(shù)組检诗、索引訪問、索引賦值瓢剿、迭代遍歷
32.厄拉多塞素數(shù)篩選法(Sieve of Eratosthenes)逢慌,P118
33.數(shù)組的負數(shù)下標,a[-i]=a[len(a)-i]
34.a[i:j]=a[i,j)间狂,左閉右開
35.隨機沖浪模型(randome surfer model)攻泼,P187,頁面排名(the page's rank),馬爾科夫鏈(Markov chain)
36.補:條件/循環(huán)等程序塊的縮寫忙菠,可以直接追加到冒號同行后面

第二章 函數(shù)和模塊

1.在計算任務(wù)中何鸡,任何時候只要可以清晰地分離任務(wù),則建議使用函數(shù)分離任務(wù)
2.函數(shù)定義

函數(shù)定義

3.函數(shù)定義位置必須位于調(diào)用該函數(shù)的全局代碼之前牛欢÷饽校∴Python程序結(jié)構(gòu)依次為①import;②函數(shù)傍睹;③全局
4.函數(shù)的副作用隔盛,指函數(shù)內(nèi)產(chǎn)生的輸入、輸出拾稳、改變系統(tǒng)狀態(tài)情況吮炕;應(yīng)盡量避免
5.多態(tài)性polymorphism,同名不同參
6.不可變數(shù)據(jù)類型:int float str bool访得,對于不可變對象的修改龙亲,看似改了值,實際上創(chuàng)建了新的對象

整數(shù)的不可變性

7.函數(shù)的形參震鹉、實參互為別名
8.一個以數(shù)組為參數(shù)俱笛,對數(shù)組進行修改的函數(shù),其修改的是數(shù)組本身而不是副本

數(shù)組為參數(shù)

9.Python語言不支持函數(shù)重載的編程語言传趾,通常使用默認參數(shù)來實現(xiàn)
10.Python在函數(shù)定義時對默認參數(shù)只求值一次迎膜,并不是每次調(diào)用都求一次

默認參數(shù)

11.Python程序可以看做是一系列文件,每個文件是一個獨立的模塊浆兰,每個模塊包含若干函數(shù)
12.模塊module:模塊包含可被其他程序調(diào)用的函數(shù)磕仅;客戶端client:客戶端是調(diào)用其他模塊中的函數(shù)的程序
13.Python語言的傳統(tǒng)是把測試代碼放在名為main()的函數(shù)中

Python模塊測試

14.Python的import語句會執(zhí)行導(dǎo)入模塊中的所有全局代碼(包括函數(shù)定義),所以模塊中不能遺留全局代碼簸呈,采用main()的方法進行測試榕订,即“單元測試”
15.模塊設(shè)計的指導(dǎo)性原則:為客戶端提供需要的函數(shù),不要包含其他多余的內(nèi)容
16.按照慣例蜕便,使用下劃線開始的函數(shù)名作為私有函數(shù)劫恒,表示不應(yīng)直接調(diào)用這個函數(shù)(實際可以做到)
17.隨機過程的迭代案例:①謝爾賓斯基三角形(Sierpinski triangle);②巴恩斯利蕨(Barnsley fern)轿腺;
18.第一次導(dǎo)入模塊時两嘴,Python編譯代碼并把結(jié)果保存到.pyc文件中,再次調(diào)用無需重新編譯
19.遞歸案例:①歐幾里得法求最大公約數(shù)族壳;②漢諾塔問題憔辫;③格雷碼;④遞歸圖形H-樹仿荆;⑤布朗橋
20.使用遞歸代碼創(chuàng)建的數(shù)組會占用大量內(nèi)存

第三章 面向?qū)ο蟮某绦蛟O(shè)計

1.在一個計算中贰您,當數(shù)據(jù)和相關(guān)的計算任務(wù)可以清楚地分開時坏平,則必須分開
2.定義新的數(shù)據(jù)類型并處理包含數(shù)據(jù)類型值得對象的能力成為數(shù)據(jù)抽象(data abstraction)
3.函數(shù)與方法類似,函數(shù)調(diào)用通常使用一個模塊名锦亦,而方法調(diào)用使用變量名

函數(shù)與方法

4.一個對象具有三個標準屬性:標識舶替、類型、值(狀態(tài))
標識(identity):其在計算機內(nèi)存中的存儲位置孽亲,唯一標示該對象
類型(type):對象類型
值(value):對象當前表示的數(shù)據(jù)類型的值

對象標準屬性

5.按慣例坎穿,內(nèi)置數(shù)據(jù)類型以小寫字母開始,而用戶自定義數(shù)據(jù)類型以大寫字母開始
6.沒有任何引用指向的對象返劲,成為孤立對象(Orphaned object),系統(tǒng)會自動重用其占據(jù)的內(nèi)存

孤立對象

7.其他程序員手動操作內(nèi)存管理時栖茉,忘記釋放孤立對象所占據(jù)內(nèi)存空間的錯誤成為內(nèi)存泄漏(Memory leak)
8.不允許在類/數(shù)據(jù)類型中定義兩個同名的方法篮绿,重載使用默認參數(shù)
9.API,應(yīng)用程序編程接口是所有客戶端之間的契約吕漂。

API

10.使用類來實現(xiàn)一個數(shù)據(jù)類型亲配,三個部分:一個構(gòu)造函數(shù)、若干實例變量惶凝、若干方法
構(gòu)造函數(shù)init()吼虎,方法potentialAt(),內(nèi)置函數(shù)str()苍鲜,測試函數(shù)main()

類示例

11.可使用init()作為構(gòu)造函數(shù)思灰,只能在其中定義和初始化實例變量,返回指向新對象的一個引用混滔,self參數(shù)指向新建對象

構(gòu)造函數(shù)
創(chuàng)建/初始化對象過程

12.方法中的變量包括——實例變量洒疚、參數(shù)變量、局部變量

方法

13.海龜繪圖(Turtle graphic)遞歸圖形:科赫曲線(Koch curve)坯屿、等角螺旋(Spira mirabilis)油湖、布朗運動(Brownian motion)、曼德布洛特集合(Mandelbrot set)
14.將客戶端和實現(xiàn)分離開從而隱藏信息的過程稱為“封裝”——使用一個數(shù)據(jù)類型無需理解其具體實現(xiàn)——使用一個程序替代另一個程序而無需修改客戶端代碼
15.未使用封裝引起的問題案例:Y2K問題领跛、郵政編碼問題乏德、IPv4和IPv6
16.初始化對象的參數(shù)為一個可變對象時(如數(shù)組),應(yīng)在初始化時進行拷貝(如self._c=a[:])吠昭,否則客戶端能繞過對象修改數(shù)組
17.Python的內(nèi)置數(shù)據(jù)類型元組tuple喊括,創(chuàng)建之后其元素不可被修改,可以使用元組組包怎诫、元組解包
18.OOP瘾晃,①封裝:黑盒;②多態(tài):單接口幻妓、多方法蹦误;③繼承:獲取另一個對象的屬性的過程
19.特殊方法劫拢,以內(nèi)置函數(shù)為例,當客戶端調(diào)用str(x)時强胰,會先看x對象有沒有str()方法舱沧,并調(diào)用之

算術(shù)運算符
等性運算符
比較運算符
內(nèi)置函數(shù)

20.引用相等:is/is not ,表示引用地址相等偶洋;對象相等:==/!=熟吏,表示值相等,如果有eq()方法的話

等性對比

21.Python中一切皆對象玄窝,函數(shù)也是牵寺,函數(shù)可作為函數(shù)的參數(shù)和返回值
22.異常時程序運行時發(fā)生的破壞性事件,通常表示一種錯誤恩脂。

拋出異常

23.斷言時在程序某個位置確定應(yīng)該為True時的一個布爾表達式帽氓,通常用于調(diào)試,默認開啟俩块,可關(guān)黎休。

拋出斷言

第四章 算法和數(shù)據(jù)結(jié)構(gòu)

1.增長量級

增長量級

2.Python可變數(shù)組的擴容機制——以倍增和減半策略保證可變數(shù)組的25%~100%的使用量

Python可變數(shù)組

3.攤銷分析,對常量型操作的總成本除以操作次數(shù)得到一個常量玉凯,是為攤銷分析
4.Python字符串和數(shù)組相似势腮,區(qū)別在于——字符串是不可變對象

字符串和字符串數(shù)組

5.Python靈活,帶內(nèi)存消耗大漫仆,最重要的功能特征之一就是內(nèi)存分配系統(tǒng)捎拯,設(shè)計目標是減輕管理內(nèi)存的繁重工作
6.緩存,Python為一個值僅創(chuàng)建一個對象拷貝歹啼,包括True玄渗、False、[-5,256]
7.調(diào)用一個函數(shù)時狸眼,系統(tǒng)從棧(stack)中分配函數(shù)所需內(nèi)存藤树,用于函數(shù)的局部變量;創(chuàng)建一個對象時拓萌,系統(tǒng)從堆(heap)中分配內(nèi)存岁钓。
8.每個用戶自定義類型的對象可能消耗大量的內(nèi)存。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末微王,一起剝皮案震驚了整個濱河市屡限,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炕倘,老刑警劉巖钧大,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罩旋,居然都是意外死亡啊央,警方通過查閱死者的電腦和手機眶诈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓜饥,“玉大人逝撬,你說我怎么就攤上這事∨彝粒” “怎么了宪潮?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趣苏。 經(jīng)常有香客問我狡相,道長,這世上最難降的妖魔是什么食磕? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任谣光,我火速辦了婚禮,結(jié)果婚禮上芬为,老公的妹妹穿的比我還像新娘。我一直安慰自己蟀悦,他們只是感情好媚朦,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著日戈,像睡著了一般询张。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浙炼,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天份氧,我揣著相機與錄音,去河邊找鬼弯屈。 笑死蜗帜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的资厉。 我是一名探鬼主播厅缺,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宴偿!你這毒婦竟也來了湘捎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤窄刘,失蹤者是張志新(化名)和其女友劉穎窥妇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娩践,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡活翩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年烹骨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纱新。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡展氓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脸爱,到底是詐尸還是另有隱情遇汞,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布簿废,位于F島的核電站空入,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏族檬。R本人自食惡果不足惜歪赢,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望单料。 院中可真熱鬧埋凯,春花似錦、人聲如沸扫尖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽换怖。三九已至甩恼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沉颂,已是汗流浹背条摸。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铸屉,地道東北人钉蒲。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像抬探,于是被迫代替她去往敵國和親子巾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

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