這一節有點難,只能說勉強完成了四個目標,教材裡稍微擴充套件一點點的內容都沒有嘗試(也是因為現在太晚了。。明天還要搬磚),下次再看的時候要對筆記進行補充。
目標:
教材提供的原始檔有點問題(好像說是因為我的終端沒法顯示utf-8,但我在他提供的網頁上直接瀏覽也是這樣的亂碼,不懂。。。),很多字元變成了亂碼,所以**的執行和教材上稍微有點差別,但是應該是沒有錯的。和教材執行結果相當類似
不懂的部分(也太多了額。。。):
開關、約定和編碼
1計算機基礎知識:
「編碼」就是一種大家都認同的轉換標準。用計算機的0和1來編碼出更大的數字。而「位元組」則表示乙個8位的(0和1)的序列。
在早期,把7位、8位等位的數字轉換為文字的標準有很多,最常見的標準是「美國資訊交換標準**」(ascii),這個標準把數字和字母互相對應,。比如90表示z,用位表示就是1011010
有了ascii,我們就能用8位(1位元組)編碼乙個字元,這樣我們就可以把字串聯在一起,合成乙個單詞。早期的計算機中的文字都是這種位元組列。這個約定序列最終會轉換成開關的通斷(?)
但ascii只能對英語和若干類似的語言進行編碼,乙個位元組可以存放256個數字(0~255),但是世界上的語言用到的字元數量遠遠超過256個,於是不同國家為各自的語言創造了不同的編碼方式,但是這樣在一種語言中使用另一種語言就會遇到問題。
因此,有人創造了unicode。即所有人類語言通用的**「通用編碼」**。unicode和ascii類似,但你可以使用32位編碼乙個unicode字元,這對所有語言都是夠用的。裡面的多餘空間,現在用來儲存「微笑」之類的表情。
但是,為了避免浪費,我們把大部分常用字元用8位編碼,如果需要更多的字元,就「逃」去使用更大的數。於是我們就又有了乙個編碼規定,就是一種壓縮編碼方式,針對常用的字元使用8位,需要的時候再去使用16位或者32位。
這一規定在python裡叫做utf-8。
解剖輸出
<===>左邊是utf-8的每乙個位元組的數字(十六進製制),右邊是真正輸出的utf-8字元。用b』 '來告訴python這是位元組。
解剖**
如果要處理的是原始位元組串,就需要通過.decode()來獲取字串。原始位元組串不包含編碼方式,它僅僅是位元組序列(就是存在電腦裡的那一串串數字),所以必須告訴python「把它解碼成utf-8字串」;而在處理字串時,有時候電腦會報錯不知道怎麼按你的要求編碼字串,這時候你需要通過.encode()來獲取你需要的位元組。
即:「解碼位元組串,編碼字串」,需要把位元組串解碼轉成字串,就是「解碼位元組串」,要把字元轉換成位元組串,就是「編碼字串」。
python練習習題
一 使用if else語句 隨堂練習 使用if else語句 1 年齡在 22到35之間 列印 可以結婚 在其他年齡段 列印 拖出去槍斃 2 年齡在70歲以上 或者 患有老年痴呆 列印不能開車,否則可以開車 練習一 age int input 請輸入年齡 if 22 age 35 print f 你...
機器學習習題
已知輸入變數x,判別模型 discriminative model 通過求解條件概率分布p y x 或者直接計算y的值來 y。生成模型 generative model 通過對觀測值和標註資料計算聯合概率分布p x,y 來達到判定估算y的目的。常見的判別模型有線性回歸 linear regressi...
Python3學習筆記23 itertools
python的內建模組itertools提供了非常有用的用於操作迭代物件的函式。首先,我們看看itertools提供的幾個 無限 迭代器 因為count 會建立乙個無限的迭代器,所以上述 會列印出自然數序列,根本停不下來,只能按ctrl c退出。cycle 會把傳入的乙個序列無限重複下去 同樣停不下...