【概述】
--書名:“笨辦法”學Python 3
--作者:澤德 A.肖
--日期:2020年02月15日
--大事件記錄:
截至2月14日24時,據31個省(自治區、直轄市)和新疆生產建設兵團報告:
現有確診病例56873例(其中重症病例11053例),累計治癒出院病例8096例,累計死亡病例1523例,累計報告確診病例66492例,現有疑似病例8969例。累計追蹤到密切接觸者513183人,尚在醫學觀察的密切接觸者169039人。
--讀書用時:900頁,歷時13.5小時,59個筆記
【讀書點評】
————————————————
2020年2月15日,今年讀完的第二本書,每天1.5小時,每次80-100頁,作爲培養興趣的書可以,作爲乾貨專業書來說不夠系統。
前面的內容很基礎,到後期類對象實例開始逐漸加深難度,再到面向對象編程和開發遊戲就比較複雜了,不過都還在可接受的範圍內,至於flash的Web平臺搭建,個人感覺看起來還行,但上手理解起來還是有點難度的。
優點:心理勸導和鼓勵的內容比較多也比較鼓舞人心,技術理解方面筆者寫的實例很多,通俗易懂不枯燥。
缺點:內容東南西北雜亂無章的感覺,廢話太多,空白頁佔用大量篇幅,乾貨和系統知識不夠全面,如果作爲入門興趣瞭解書籍還是不錯,但是如果希望系統的瞭解整個語言的基礎類型、編程框架和邏輯思想,還是推薦另一本python編程從入門到實踐。
【讀書筆記】
————————————————
◆ 常見問題回答
python3版本,round(1.25,1)=1.2操作四捨五入精確到小數點1位以上的時候由於十進制輸入和二進制輸出的關係,到第三位爲5的浮點數時,保留一位不會進位,會有誤差,慎入。
>> round()函數
◆ 鞏固練習
f = open(filename,“r”),這種格式的讀寫文本才需要每次close(),如果可以的話,建議用with open(filename,“r”)as f:f.read(),可以免去每次關閉文件讀取的步驟。
>> close()
◆ 習題16 讀寫文件
f.read()和f.readline()讀取文本,以字符串返回;f.readlines()讀取全文內容,以列表返回;seek(0,0)初始化遊標。
>> readline
◆ 鞏固練習
重點區分遊標位置和數據是否需要被覆蓋,w只寫模式下,f.truncate()不需要清楚內容,因爲每次打開文件寫數據,會覆蓋老內容,讀寫的話建議使用w+模式,單純追加數據的話建議使用a模式。
>> target.truncate()
◆ 習題17 更多文件操作
if exists(文件名),存在返回True,不存在返回False。
>> print(f"Does the output file exist? {exists(to_file)}")
◆ 習題18 命名、變量、代碼和函數
>> 
標
題包含的內容夠多的吧?接下來我要教你函數(function)了!說到函數,不同的程序員會有不一樣的理解和使用方法,不過我只會教你現在能用到的最簡單的使用方法。函數可以做以下3件事。
1.它們給代碼段命名,就跟變量給字符串和數值命名一樣。
2.它們可以接收參數,就跟你的腳本接收argv一樣。
◆ 常見問題回答
x+=y,就是x=x+y,之前有一次記混了。
>> x += y的意思和x = x + y是一樣的。
◆ 解剖代碼
DB:decode bytes解碼二進制;ES:encode strings編碼字符串。其實大部分腳本都是編碼字符串,讓電腦識別,解碼常用於傳輸底層數據。
>> DBES——“decode bytes, encode strings”的縮寫,即“解碼字節串,編碼字符串”。
◆ 習題33 while循環
while,一定要注意遞增,或者加入條件判斷使它變爲False,從而退出死循環。
>> 重複檢查你的while語句,確定你測試的布爾表達式最終會變成False。
◆ 常見問題回答
exit(0),表示沒有錯誤正常退出。exit(1),表示發生錯誤異常退出。
>> 在很多類型的操作系統裏,exit(0)可以中止某個程序,而其中的數字參數則用來表示程序是否是遇到錯誤而中止的。exit(1)表示發生了錯誤,而exit(0)則表示程序是正常退出的。
◆ if語句的規則
我的智力只允許我用2層if,否則會把自己繞暈。
>> 3. if語句的嵌套不要超過兩層,最好儘量保持只有一層。
◆ 調試的小技巧
debug調試模式,確實有點燒腦,比純魯代碼還難理解。
>> 調試程序的最好的方法是使用print在各個想要檢查的關鍵點將變量打印出來,從而檢查那裏是否有錯。
◆ 習題39 字典,可愛的字典
>> 
接
下來你要學習Python的“字典”數據結構了,字典是類似列表的一種存儲數據的方法,但要獲取其中的數據,你用的不是數值索引,而是任何你想用的東西。這樣你就可以把字典當作數據庫來存儲和組織數據了。
我們比較一下字典和列表的功能。你看,列表可以讓你做這樣的事情。
習題39 Python會話
 >>> things = [′a′, ′b′, ′c′, ′d′]
◆ 字典的例子
print(“-”*10)發現小技巧,每次分割線我都手敲一堆“-”,忘記可以用字符串乘法了。
>> print(′-′ * 10
◆ 常見問題回答
列表是有序的集合,可以切片、索引等操作;字典是無序鍵值對,強行排序可以用sorted(dict.items,key=lambda x:x[0],reverse=False)值升序排序,常用於請求報文payloud。
>> 列表是一些項的有序排列,而字典是將一些項(鍵)對應到另外一些項(值)的數據結構。
◆ 模塊和字典差不多
知識點:
import 模塊名
模塊名.函數名,調用函數
模塊名.變量名,調用模塊內部的全局變量
>> 然後可以使用.操作符訪問模塊中的函數和變量
◆ 類和模塊差不多
知識點:
模塊中爲何要創建類?
因爲調用類,可以生成無數個實例對象,每個對象互相不干擾;
test =class_name()
test1 = class_name()
但是如果沒有類,只有函數,那調用以後只能用同一批次的代碼,沒法拓展。
>> 使用類而非模塊的原因如下:你可以拿上面這個MyStuff類重複創建出很多出來,哪怕是一次100萬個,它們也會互不干涉。而對於模塊來說,一次導入之後,整個程序裏就只有這麼一份內容,只有鼓搗得很深才能弄點兒花樣出來。
◆ 對象和import差不多
test = class_name()
test就是對象,class_name()就是類,這個過程就叫實例化。
>> 當你將一個類“實例化”以後,你得到的就叫對象(object)。
調用模塊的類,就好比去商店買了張白紙,在有限的範圍內,隨便寫寫畫畫。
>> 記住這不是拿來一個類就直接用,而是將類當作一個“藍圖”,然後用它創建和這個類有相同屬性的副本。
◆ 常見問題回答
知識點:
類的靜態函數,
def__init__(self):
self.argv = argv
調用類,會自動調用其靜態函數和初始化類的初始化靜態屬性,self.表示是實例的屬性,不加就變成了普通變量會有歧義。
>> 有了self.cheese = ′Frank′就清楚地知道這指的是實例的屬性self.cheese
◆ 專有詞彙練習
>> · 類(class):告訴Python創建新類型的東西。
· 對象(object):兩個意思,即最基本的東西,或者某樣東西的實例。
· 實例(instance):這是讓Python創建一個類時得到的東西。
·def:這是在類裏邊定義函數的方法。
·self:在類的函數中,self指代被訪問的對象或者實例的一個變量。
· 繼承(inheritance):指一個類可以繼承另一個類的特性,和父子關係類似。
· 組合(composition):指一個類可以將別的類作爲它的部件構建起來,有點兒像車子和車輪的關係。
· 屬性(attribute):類的一個屬性,它來自於組合,而且通常是一個變量。
· 是什麼(is-a):用來描述繼承關係,如Salmon is-a Fish(鮭魚是一種魚)。
· 有什麼(has-a):用來描述某個東西是由另外一些東西組成的,或者某個東西有某個特徵,如Salmon has-a mouth(鮭魚有一張嘴)。
◆ 練習從語言到代碼
python .py english,啥意思?我都沒用過
>> $ python oop_test.py english
◆ 常見問題回答
a = list[:],複製列表
>> result = sentence[:]
◆ 習題42 對象、類及從屬關係
類:表示擁有相同特徵帶我一個虛無的統稱,比如魚類。
對象:表示某一類具體的東西稱爲一個對象,面前這盆泥鰍。
實例化:這盆泥鰍裏面的,一隻紅色的泥鰍是實例a,一隻黑色的泥鰍實例b。
>> 是“類”(class)和“對象”(object)的區別。問題在於,類和對象並沒有真正的區別。它們其實是同樣的東西,只是在不同的時間點名字不同罷了。
◆ 關於class Name(object)
import this的python之禪說到:顯式大於隱式,class Class_name(object):表示繼承了一個基礎類。
>> Python之禪不是說顯式優於隱式嘛
◆ 鞏固練習
看別人代碼,可以用“是什麼”,有什麼的方法去讀。
>> 是什麼”和“有什麼”
◆ 重複和細化
>> 我的這個小流程的最後一步其實也不算一步,而是類似一個while循環。前面所講的東西並不是一次性操作,需要回去重複整個流程,基於你從後面步驟中學到的東西來細化你寫的內容。有時,我走到第三步就會發現需要回到第一步和第二步去弄些東西,那就會停下來回到前面去弄完。有時我會突然來了靈感,然後趁熱打鐵直接跳到後面把代碼寫出來,不過接着我會回到前面的步驟來檢查並確認我的代碼是不是覆蓋了所有的可能性。
關於這個流程,要注意的另一個點是,你不需要把自己鎖定在一個層面上去完成某個特定任務。假如說不知道怎樣寫Engine.play這個方法,可以停下來,就在這個任務上使用這個流程,直到弄明白怎樣寫爲止。
◆ 習題44 繼承與組合
複雜了複雜了,其實理解成繼承本身就OK,比如冰與火之歌的男主囧snow,他繼承了皇室的血脈,就等於擁有一個身份,這個身份天生自帶主角光環和一切忠誠於皇室的僕人。
>> 大部分使用繼承的場合都可以用組合取代或簡化,而多重繼承則需要不惜一切地避免
◆ 什麼是繼承
皇子繼承了皇帝的身份。
未創建實例的時候,相當於只是太子,擁有皇帝的部分默認權限,自帶高貴的身份可以在宮中與宰相平起平坐;
創建實例後的時間,相當於皇上駕崩,太子登基,擁有父親皇上的一切權利的同時,還可以執行罷免舊臣,新增國法等一系列類似明治維新等各種國策變更。
>> 繼承就是用來指明一個類的大部分或全部功能都是從一個父類中獲得的。
子類代碼塊中,可以通過“super(子類名,self).父類函數名()”的方式調用父類的函數。
>> super(Child, self).altered()
◆ 繼承和組合的應用場合
繼承只要是自動調用了父類.init()靜態函數和變量的作用,優點就是簡單幹淨的解決代碼複用問題。
>> “繼承與組合”的問題說到底還是爲了解決關於代碼複用的問題。
避免使用多重繼承,邏輯太複雜,容易出錯。
>> 不惜一切代價地避免多重繼承,因爲它太複雜以至於很不可靠。如果非要用,那得準備好鑽研類層次結構,以及花時間去找各種東西的來龍去脈。
◆ 常見問題回答
類也可以理解爲批量生產手機時,第一個被設計出來的手機的模版或模具。
>> 在Python裏類其實像是用來創建對象的模板,就跟製作硬幣用到的模具一樣。
◆ 我們的遊戲詞彙
元組本身的元素不能更改,但是元組某個元素如果是列表,列表的元素可以更改。
>> 元組其實就是一個不能修改的列表。
◆ 常見問題回答
導入失敗檢查:
1.目錄是否缺失__init__.py;
2.導入名稱大小寫檢查;
3.導入路徑檢查;
4.同名模塊檢查;
5.PYTHONPATH環境變量檢查,或者直接os.path.append(新增本地路徑)
>> 爲什麼我老看到ImportError?
通常有4件事情會導致ImportError:(1)在模塊目錄中沒有創建__init__.py;(2)在錯誤的目錄中執行了import;(3)拼寫錯誤,導致導入了錯誤的模塊;(4)PYTHONPATH沒有設置到.,所以你無法從當前目錄加載模塊。
◆ 習題49 創建句子
主謂賓動介句子練習:
I fell in love with a beautiful girl with a big teddy and a small teddy that I met near my home yesterday.
>> 主語 謂語(動詞)賓語
◆ 安裝flask
框架,就好像汽車的車架,具體配什麼地盤、發動機、變速箱、剎車片、輪胎、外殼,都由你在這個地盤基礎上搭建你要的東西。
>> 所謂的“框架”通常是指“讓某件事情做起來更容易的軟件包”。
flask,web框架搭建的第一步。
>> pip install flask
◆ 寫一個簡單的“Hello World”項目
搭建web第二步:
把寫好的代碼,放入application中,通過route路由指定運行的服務器路徑。
>> 1 fromflask importFlask 2 app = Flask(__name__) 3 4 @app.route(′/′) 5 defhello_world(): 6 return′Hello, World! ′ 7 8 if__name__ == "__main__": 9 app.run()
運行你的flash腳本,然後通過瀏覽器:ip:端口,訪問本地搭建的web應用程序
>> (lpthw) $ python3.6 app.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
◆ 修正錯誤
調試模式:FLASH_DEBUG = 1,啓動調試模式後,日誌打印會更加詳細,而且調試後可以熱部署,立馬生效,缺點就是生產環境如果啓動調試模式,被黑客攻擊,就會導致網站被挾持,一將功成萬骨枯,就是這個意思,很不安全。
>> $ exportFLASK_DEBUG=1 (lpthw) $ python3.6 app.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 222-752-342
◆ 常見問題回答
如果無法運行啓動程序,可能是路徑錯誤,需要切換到正確目錄,在bin/的上一層文件run app.py才能成功。
>> 如果你無法運行python3.6 app.py,就說明你不在正確的目錄下。
◆ Web的工作原理
重點!:瀏覽器和服務器交互的流程圖。
>> [插圖]
1.用戶輸入網址,點擊確定,發出請求
2.請求通過接口,發到互聯網
3.互聯網通過服務器傳給後臺程序執行
4.後臺處理完返回響應給服務器
5.服務器通過網絡和接口傳給瀏覽器
6.瀏覽器渲染響應,顯示到頁面上
>> HTTP請求的流程
FTP文件傳輸協議。
>> 你還可以試試ftp://ibiblio.org/,這是一個“文件傳送協議”(File Transport Protocol, FTP)的例子。
端口就是通過網絡傳輸,傳輸數據和接收數據的入口,讓瀏覽器和服務器完成資源交流。
>> 端口準備好以後,操作系統會回傳給你的程序一個類似文件的東西,它所做的事情就是通過網絡傳輸和接收數據,讓你的計算機和http://test.com這個網站所屬的服務器之間實現數據交流
◆ 表單的工作原理
數據交互:http傳參數執行後臺腳本。
>> 1 fromflask importFlask 2 fromflask importrender_template 3 fromflask importrequest 4 5 app = Flask(__name__) 6 7 @app.route("/hello") 8 defindex(): 9 name =request.args.get(′name′, ′Nobody′) 10 11 ifname: 12 greeting =f"Hello, {name}" 13 else: 14 greeting ="Hello World" 15 16 returnrender_template("index.html", greeting=greeting) 17 18 if__name__ =="__main__": 19 app.run()
重啓你的Web應用程序(按Ctrl+C後重新運行),確認它已運行起來,然後使用瀏覽器訪問http://localhost:5000/hello,這時瀏覽器應該會顯示“I just wanted to say Hello, Nobody.”。接下來,將瀏覽器中的URL改成http://localhost:5000/hello?name=Frank,然後你可以看到頁面顯示爲“Hello, Frank.”。最後將name=Frank部分修改爲你自己的名字,你就可以看到它對你說“Hello”了。
◆ 創建HTML表單
>> 在URL上傳遞參數是可以的,不過這樣看上去有些醜陋,而且不方便普通人使用,你真正需要的是一個“POST表單”,這是一種包含了<form>標籤的特殊HTML文件。這種表單收集用戶輸入的信息並將其傳遞給你的Web應用程序,這和你上面實現的目的基本是一樣的。
讓我們來快速創建一個,從中你可以看出它的工作原理。下面是你需要創建的新的HTML文件,叫templates/hello_form.html。
hello_form.html
<html> <head> <title>Sample Web Form</title> </head><body>  <h1>Fill Out This Form</h1>
◆ 怎樣學習任何一種編程語言
讀書技巧:通讀一本書,然後所有案例都敲一遍,不一定要懂,但是要敲一遍,然後自己寫點簡單的場景練習,最後模仿他人的代碼拼接組裝,最後自己開發大型項目。
>> 1.找到關於這種編程語言的書或介紹性讀物。
2.通讀這本書,把裏邊的代碼都錄入一遍並使其運行起來。
3.一邊讀書一邊寫代碼,同時做好筆記。
4.使用這種編程語言實現一些你用另一種熟悉的編程語言做過的程序組件。
5.閱讀別人用這種編程語言編寫的代碼,試着仿照他們的方式編寫代碼。
◆ 老程序員的建議
編程其實就是優化生活的一種方式,提供另一種思維拓展你的知識面,其實就和看電影一樣,放大你的人生而已。
>> 這麼久的旅程下來,我的體會是:編程語言這東西並不重要,重要的是你用這些編程語言做的事情。
編程語言的優點:用工具做你感興趣的事情。
>> 編程語言的真正目的——作爲你的工具來做有趣的事情。
我一直覺得做一件短期不會有效果但是長期下來會和別人不一樣的事情,是很有魅力的一個決定,so,安排!
>> 你會編程。他們不會。太酷了。
◆ 練習1 準備工作
Linux從刪庫到跑路,僅此一家,別無分店。
>> rm -rf /
Linux/Windows,常用命令大全。
>> Linux/macOS
用索引卡片寫下列出來的所有命令,一張卡片寫一條,正面寫下命令的名字,背面寫下命令的定義。每天一邊學習一邊繼續這個附錄的後續內容。
·pwd:打印工作目錄。
·hostname:計算機在網絡中的名稱。
·mkdir:創建目錄。
·cd:更改目錄。
·ls:列出目錄中的內容。
·rmdir:刪除目錄。
·pushd:推入目錄。
·popd:彈出目錄。
·cp:複製文件或目錄。
·mv:移動文件或目錄。
·less:逐頁查看文件。
·cat:打印整個文件。
·xargs:執行參數。
·find:尋找文件。
·grep:在文件中查找內容。
·man:閱讀手冊。
·apropos:尋找恰當的手冊頁面。
·env:查看你的環境。
·echo:打印一些參數。
·export:導出/設定一個新的環境變量。
·exit:退出shell。
·sudo:成爲超級用戶root,危險命令!
Windows
如果你用的是Windows,下面是你要學習的命令。
·pwd:打印工作目錄。
·hostname:計算機在網絡中的名稱。
·mkdir:創建目錄。
·cd:更改目錄。
·ls:列出目錄中的內容。
·rmdir:刪除目錄。
·pushd:推送目錄。
·popd:彈出目錄。
·cp:複製文件或目錄。
·robocopy:更可靠的複製命令。
·mv:移動文件或目錄。
·more:逐頁查看文件。
·type:打印整個文件。
·forfiles:在一大堆文件上面運行一條命令。
·dir -r:尋找文件。
·select-string:在文件中查找內容。
·help:閱讀手冊。
·helpctr:尋找恰當的手冊頁面。
·echo:打印一些參數。
·set:導出/設定一個新的環境變量。
·exit:退出shell。
·runas:成爲超級用戶root,危險命令!
不停地練習,直到你能做到:看到一條命令,就能立即說出它的功能;反過來也能說出實現每個功能所需的命令。通過這樣的方式你可以爲自己建立術語表,不過如果你覺得煩,也彆強迫自己在上面花太多時間。
◆ 練習2 路徑、文件夾和目錄(pwd)
曾經也思考過文件夾和目錄的區別,其實都是文件夾,只是目錄的感覺分了很多層一樣。
>> 文件夾和目錄是同一個東西,這兩個詞可以互相替換
◆ 練習3 如果你迷失了
cd~:回到home目錄。
>> cd~
◆ 練習5 更改目錄(cd)
cd進入有名稱有空格的目錄,可以用引號把文件名擴起來
>> cd "I Have Fun"
◆ 點評
點評:★★★☆☆
2020年2月14日,今年讀完的第二本書,每天2小時,每次150頁,作爲培養興趣的書可以,作爲乾貨專業書來說不夠系統。
前面的內容很基礎,到後期類對象實例開始逐漸加深難度,再到面向對象編程和開發遊戲就比較複雜了,不過都還在可接受的範圍內,至於flash的Web平臺搭建,個人感覺看起來還行,但上手理解起來還是有點難度的。
優點:心理勸導和鼓勵的內容比較多也比較鼓舞人心,技術理解方面筆者寫的實例很多,通俗易懂不枯燥。
缺點:內容東南西北雜亂無章的感覺,廢話太多,乾貨和系統知識不夠全面,如果作爲入門興趣瞭解書籍還是不錯,但是如果希望系統的瞭解整個語言的基礎類型、編程框架和邏輯思想,還是推薦另一本python編程從入門到實踐。
——筆記分割線——
◆ 練習1 準備工作
Linux從刪庫到跑路,僅此一家,別無分店。
>> rm -rf /
Linux/Windows,常用命令大全。
>> Linux/macOS
用索引卡片寫下列出來的所有命令,一張卡片寫一條,正面寫下命令的名字,背面寫下命令的定義。每天一邊學習一邊繼續這個附錄的後續內容。
·pwd:打印工作目錄。
·hostname:計算機在網絡中的名稱。
·mkdir:創建目錄。
·cd:更改目錄。
·ls:列出目錄中的內容。
·rmdir:刪除目錄。
·pushd:推入目錄。
·popd:彈出目錄。
·cp:複製文件或目錄。
·mv:移動文件或目錄。
·less:逐頁查看文件。
·cat:打印整個文件。
·xargs:執行參數。
·find:尋找文件。
·grep:在文件中查找內容。
·man:閱讀手冊。
·apropos:尋找恰當的手冊頁面。
·env:查看你的環境。
·echo:打印一些參數。
·export:導出/設定一個新的環境變量。
·exit:退出shell。
·sudo:成爲超級用戶root,危險命令!
Windows
如果你用的是Windows,下面是你要學習的命令。
·pwd:打印工作目錄。
·hostname:計算機在網絡中的名稱。
·mkdir:創建目錄。
·cd:更改目錄。
·ls:列出目錄中的內容。
·rmdir:刪除目錄。
·pushd:推送目錄。
·popd:彈出目錄。
·cp:複製文件或目錄。
·robocopy:更可靠的複製命令。
·mv:移動文件或目錄。
·more:逐頁查看文件。
·type:打印整個文件。
·forfiles:在一大堆文件上面運行一條命令。
·dir -r:尋找文件。
·select-string:在文件中查找內容。
·help:閱讀手冊。
·helpctr:尋找恰當的手冊頁面。
·echo:打印一些參數。
·set:導出/設定一個新的環境變量。
·exit:退出shell。
·runas:成爲超級用戶root,危險命令!
◆ 練習2 路徑、文件夾和目錄(pwd)
曾經也思考過文件夾和目錄的區別,其實都是文件夾,只是目錄的感覺分了很多層一樣。
>> 文件夾和目錄是同一個東西,這兩個詞可以互相替換
◆ 練習3 如果你迷失了
cd~:回到home目錄。
>> cd~
◆ 練習5 更改目錄(cd)
cd進入有名稱有空格的目錄,可以用引號把文件名擴起來
>> cd "I Have Fun"