AI 学习之路——轻松初探 Python 篇(三)
喜歡小之的文章的可以關注公眾號「WeaponZhi」持續關注動態
這是「AI 學習之路」的第 3 篇,「Python 學習」的第 3 篇
Python 字符串使用和 C 語言比較類似,但還有一些我們值得注意的地方需要關注,用這篇文章來幫助大家掌握 Python 的字符串吧!
編碼
不論什么語言,我們都需要考慮一下這個語言的編碼問題。「ASCII」編碼是我們最熟悉的編碼,但它只有 127 個字符被編碼到計算機里面了,顯然,像中日韓這類國家,語言文字比較特殊,就需要自己來指定編碼格式。
比如,中國自己就制定了「GB2312」編碼,韓文則是「EUC_KR」,俄語是「KOI8-R」,顯然,如果每一個國家都需要制作一個適配的編碼,那我們的計算機世界就要亂套了,不同國家之間信息的傳輸將變的寸步難行。如果電腦里沒有某個語言的編碼,那就會產生亂碼沖突,這是相當麻煩的。
所以,大家商量了一下,就做出了「Unicode」這么個編碼格式,它干脆把所有的編碼都統一了,只要你用 Unicode 它就能保證沒有亂碼問題。
但 Unicode 也有缺點。比如如果一個文件是純英文來寫的,那所有的字符實際上都可以用過 ASCII 的 8 位二進制來表示。我們知道 Unicode 是通過補 0 來表示一些低位數的字符的,這樣,為了保持兼容性,你實際上白白浪費了兩倍的空間。
UTF-8 就是為了解決這樣一個問題而出現的。它是一個**「可變長編碼」**,你不是嫌空間浪費嗎,那么現在只要你用了 UTF-8,從此以后英文字母咱就可以用 1 個字節來存儲了,如果遇到像中文這種「高大上」但又比較復雜的字體,我們靈活對待,用三個字節來表示,實在有某些更加變態而復雜的字體,那最多可以拓展到用 6 個字節來存儲。總之,這樣下去,既解決了兼容性問題,又可以節約資源,資源問題迎刃而解了。
Python 中的字符串是用 Unicode 編碼的,所以 Python 可以支持多語言,當我們保存的時候,我們需要把 Unicode 轉換為 UTF-8,使用的時候,再從文件中轉換 UTF-8 到 Unicode 到內存中。
通過編碼的這種演進過程,我們是不是會有所啟發呢?
**你會發現,一切技術的產生和發展,都是為了解決問題而出現的。**大家如果細細的思考一下,不論是語言、技術、設計模式、架構,實際上他們的發展過程并不是一個憑空的技術升級行為,而是為了解決某種問題而誕生的。
「GB2312」是為了解決 ASCII 沒有中文而才創造出來的,「Unicode」是因為各國語言不兼容而創造出來的。而 Unicode 對于資源的浪費又促成了 UTF-8 的產生。最典型的問題驅動技術,就是設計模式了,設計模式的產生實際上就是各種為解決某些特定問題而總結出來的方案。
所以在技術上,遇到問題并不可怕,問題恰恰是最能幫助自己提升的,問題是創造力的源頭之一。我們同時在平時看書的時候,也要抱著解決問題的角度來學習,如果你單純的去讀一本技術書,這本書又只有理論和代碼,你會覺得很枯燥。如果書里可以結合一些案例和問題,從這里展開講解,然后再介紹一些解決方案和代碼,這種教學方式效果就會特別好。比如我之前看過的一本書「Android 源碼設計模式」,它就是用這種方式來進行展開的說明設計模式的場景,看完了這本書后,以后面對某種場景,我就特別容易回想起之前書中寫過的一些場景,從而產生記憶聯想。
不僅如此,如果想的再深一點,你就會突然醒悟,實際上人類社會好像也是以這種形式來發展的...
是不是有點扯遠了?我們還是來看看字符串吧。
字符串
Python 的字符串和 C 語言有些類似。我們簡單的把常用的用法介紹一下即可,平時只要多寫幾次,就能比較熟練的掌握了(此節引用廖雪峰教程示例,作了簡化)。
ord() 和 chr()
使用 ord() 獲取字符的整數表示,chr() 則是把編碼轉化為字符:
ord('A') 65 ord('中') 20013 chr(66) 'B' chr(25991) '文' 復制代碼bytes
用帶「b」前綴的單引號或者雙引號字符來表示「bytes」類型的數據,非常方便
x = b'ABC' encode() 和 decode() 復制代碼開發的時候,經常要把 str 和 bytes 進行相互轉換, str 通過 encode() 轉化為 bytes,bytes 通過 decode() 轉化為 str
'ABC'.encode('ascii') b'ABC''中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87''中文'.encode('ascii') Trace back (most recent call last):File "<stdin>", line 1, in<module> UnicodeEncodeErrorb'ABC'.decode('ascii') 'ABC'b'\xe4\xb8\xad\xe6\x96\x87' '中文'b'\xe4\xb8\xad\xff'.decode('utf-8') Tradeback(most recent call last):... UnicodeDecodeError 復制代碼這里要注意容錯,encode 不能轉化超過參數編碼范圍的字符,而如果 bytes 中包含編碼格式無法解析的字符,decode() 也會報錯。
len()
通過 len 計算字符串的字符數或者 bytes 的字節數
len('ABC') 3 len('中文') 2 len(b'ABC') 3 len(b'\xe4\xb8\xad\xe6\x87') 6 len('中文'.encode('utf-8')) 6 復制代碼從輸出結果發現,中文占 3 個字節,英文占 1 個字節
聲明編碼格式
如果希望 Python 解釋器可以按 UTF-8 編碼來讀取 .py 文件,需要在文件中聲明
#1 /usr/bin/env python3 # -*- coding: utf-8 -*- 復制代碼第一行只對 Linux/OS X 有效,它告訴系統這是一個 Python 可執行程序。第二行則告訴 Python 解釋器,這個文件要按照 UTF-8 編碼。如果不這樣寫,中文輸出會有亂碼。
字符串格式化
格式化和 C 有點像,用「%」實現
'Hello,%s' % 'world' 'Hello , world''你好%s,你有 ¥%d 嗎' % ('小之',50) '你好小之,你有 ¥50 嗎' 復制代碼占位符中,%d 代表整數,%f 代表浮點數,%s 代表字符串,%x 代表十六進制整數,占位符要和 % 號后面的變量或者值一一對應,如果只有一個占位符,% 號后不需要括號。
占位符還可以控制空格、小數點和補 0 的位數。比如:
print('%2d-%02d' % (5,1))5-01print('%.2f' % 3.1415) 3.14 復制代碼注意,「5-01」中,5 的前面是有兩個空格的。
如果你需要使用 % 這個字符顯示在字符串中,那么就需要轉義了,%% 表示一個 %
'小之公眾號的點贊率竟然超過了 %d%%' % 50 '小之公眾號的點贊率竟然超過了 50%' 復制代碼歡迎關注我的公眾號
總結
以上是生活随笔為你收集整理的AI 学习之路——轻松初探 Python 篇(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何改android device mo
- 下一篇: 20.27 分发系统介绍 20.28 e