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