Python入門三部曲 | 第一節(jié)課:基礎入門

Python10 行代碼加密文件
——三節(jié)課讓你弄清自己到底適不適合學習編程
針對人群: 零基礎想學習 python,又怕自己學不會,懷疑自己是不是適合學習編程的童鞋。
這一節(jié)課主要是掃盲,很多同學可能連 python 運行環(huán)境都沒有搭建好。

python 運行環(huán)境搭建
python 是一門解釋型編程語言,python 代碼是通過 python 解釋器解釋后交給計算機執(zhí)行的。
所以 python 運行環(huán)境的搭建主要是安裝 python 解釋器。
python 版本區(qū)別
目前 python 有兩個大的版本,2.X 和 3.X。2.X 是遺產(chǎn),3.X 是未來。除非特殊情況,新手建議學習 3.X。
下載安裝 python 解釋器
訪問 python 官網(wǎng),下載解釋器安裝包。
注意按照操作系統(tǒng)下載對應版本。

下載后雙擊安裝文件會出現(xiàn)如下界面

記得勾選添加環(huán)境變量,然后就是下一步下一步,一般情況下都會正常安裝成功。

cmd 命令行工具
全黑的窗口,滿屏的像瀑布一樣流動的英文,這是電影中黑客出場的畫面。
cmd 命令行工具就滿足這個要求,在 windows 系統(tǒng)中,win 鍵 +R 鍵彈出運行窗口

輸入 cmd
確定就會打開命令行工具。
一般情況會打開如下窗口

不同版本,可能會有配色的不同,但功能一致。
其實這就是一個名字為 cmd.exe
的程序,感興趣的同學可以在電腦中找下它的位置。
它有一個很重要的作用就是能夠通過程序名自動調(diào)用對應的程序,而不需要去找到可執(zhí)行文件雙擊執(zhí)行。
例如,可以在命令行鍵入 notepad
回車,你會發(fā)現(xiàn)居然打開了記事本。

那是因為記事本這個程序的程序名就是 notepad.exe
,機靈的小可愛就會聯(lián)想 QQ 的程序名是 qq.exe
那么,那么在命令行中輸入 QQ 是不是也可以打開 QQ 呢?
結果多半如下:

這是為什么呢?
其實 cmd 在接收到用戶輸入的命令后,會去電腦中搜索同名的程序或者批處理等文件,但是為了效率,它不會查找每個文件夾。
那它會去哪些文件夾中搜索呢?
環(huán)境變量
環(huán)境變量其實是一系列常用程序所在路徑的集合,記事本程序的路徑存在默認的環(huán)境變量中所以可以通過命令行打開,QQ 程序的路徑不在環(huán)境變量中,所以打不開。
windows 系統(tǒng)設置環(huán)境變量的步驟如下:
右鍵【我的電腦】-【屬性】-【高級系統(tǒng)設置】-【環(huán)境變量】

在用戶變量中找到環(huán)境變量 path
,如果沒有就新建一個 path
變量。
點擊編輯,將 QQ 程序路徑添加到 path
中。

然后重新打開命令行工具應用新的環(huán)境變量,再次鍵入 qq
你就可以打開 QQ 啦。
如果在安裝 python 解釋器的時候忘記勾選添加環(huán)境變量,也可以通過手動設置環(huán)境變量,然后在命令行中就可以運行 python 命令啦。
在命令行中鍵入 python
命令,出現(xiàn)如下窗口表示運行環(huán)境搭建成功。


python 代碼的運行
python 代碼的運行方式有兩種:
交互式
在命令行窗口輸入命令
python
進入 python 解釋器交互式客戶端,在窗口中輸入任意 python 代碼,客戶端窗口都會立即返回運行結
果,當關閉客戶端窗口后,代碼不會保存。這種方式一般用來進行測試,不是正式的運行方式。

腳本式
任意文本編輯工具都可以進行 python 代碼的編寫 ,在桌面新建一個文本文檔,寫入如下代碼
print('hello world')
然后保存(盡量不要使用記事本直接編輯代碼)。現(xiàn)在這個文本文檔就是一個 python 的源代碼文件,通
常稱為 python 腳本文件,通常我們會將 python 腳本文件的后綴改為 .py 。
python 代碼本質(zhì)上是通過 python 解釋器解釋成機器碼后交由計算機執(zhí)行的。
在命令行輸入命令
python 腳本文件路徑
就可以運行對應的腳本代碼。


文件概述
什么是文件
計算機文件是一個存儲在存儲器上的數(shù)據(jù)序列,可以包含任何數(shù)據(jù)內(nèi)容。概念上,文件是數(shù)據(jù)的集合和抽象。用文件形式組織和表達數(shù)據(jù)更有效也更為靈活。文件包括兩種類型:文本文件和二進制文件。
文件本質(zhì)上都是存儲在存儲器上的二進制數(shù)據(jù)。
使用 HexEditor 可以以 16 進制的方式打開任何文件。

特別的是文本文件遵循統(tǒng)一的字符編碼,在打開時,計算機會根據(jù)字符編碼解析成編碼表上對應的字符。
二進制文件和文本文件本質(zhì)上沒有區(qū)別,只是沒有統(tǒng)一的編碼,需要根據(jù)特定的程序進行解析和運行。
無論是文本文件還是二進制文件都可以用"文本文件方式"和"二進制文件方式"打開,打開后的操作不同。
字符編碼
計算機底層只能表示二進制信息,不能直接表示文字。計算機顯示給我們看的文字可以看做是很小的一張張字符的圖片。但如果文字都以圖片進行存儲和傳輸,圖片體積非常大,從而效率會變得很低。
所以計算機科學家將這些單個字符圖片放到一個文件中,這個文件就是字體文件。再給每個字符一個編號,存儲傳輸時就用字符的編號。這個編號表就是字符編碼(簡單這么理解)。
文本文件存儲的就是每個字符的編號,計算機在打開文本文件時,會根據(jù)指定的編碼,去編碼表中查詢一個一個的字符,再渲染給用戶。
ascii 碼
因為歷史原因,字符編碼有很多。最先發(fā)明的是 ascii 碼。
總共 127 個字符,因此使用一個字節(jié)(8 位二進制)來表示,也即是一個字符占一個字節(jié)的大小。

在記事本中鍵入 abc123+-*/
,然后使用 HexEditor 打開后發(fā)現(xiàn)跟上面的編碼表是一致的。

gb2312
可以看到 ascii 碼里只有英文字母和常見字符,沒有中文,以及世界上其他國家的文字。隨著計算機的發(fā)展,各國都創(chuàng)建了自己國家的計算機字符編碼。
1980 年中國發(fā)布了 gb2312, GB2312 是一個簡體中文字符集,由 6763 個常用漢字和 682 個全角的非漢字字符組成。
gb2312 使用兩個字節(jié)表示一個漢字。
通過字符串的 encode 方法可以根據(jù)字符編碼進行編碼
'中'.encode('gb2312')
b'\xd6\xd0'
gbk
GB2312 的出現(xiàn),基本滿足了漢字的計算機處理需要,但對于人名、古漢語等方面出現(xiàn)的罕用字,GB 2312 不能處理,這導致了后來 GBK 及 GB18030 漢字字符集的出現(xiàn)。
GBK 即漢字內(nèi)碼擴展規(guī)范,K 為擴展的漢語拼音中“擴”字的聲母。GBK 編碼標準兼容 GB2312,共收錄漢字 21003 個、符號 883 個,并提供 1894 個造字碼位,簡、繁體字融于一庫。
gbk 也是使用兩個字節(jié)表示一個漢字。
'中'.encode('gbk')
b'\xd6\xd0'
'囙'.encode('gb2312')
UnicodeEncodeError Traceback (most recent call last)
in
----> 1 '囙'.encode('gb2312')
UnicodeEncodeError: 'gb2312' codec can't encode character '\u56d9' in position 0: illegal multibyte sequence
'囙'.encode('gbk')
b'\x87\xe0'
unicode
世界上存在著多種編碼方式,同一個編碼值,在不同的編碼體系里代表著不同的字。要想打開一個文本文件,不但要知道它的編碼方式,還要安裝有對應編碼表,否則就可能無法讀取或出現(xiàn)亂碼。
我上大學時玩電腦游戲最大的問題就是亂碼。
以日文的編碼方式創(chuàng)建一個文本文件寫入 やめて
,然后用記事本打開會顯示如下:

這個問題促使了 unicode 碼的誕生。
unicode 將世界上所有的符號都納入其中,無論是英文、日文、還是中文等,大家都使用這個編碼表,就不會出現(xiàn)編碼不匹配現(xiàn)象。每個符號對應一個唯一的編碼,亂碼問題就不存在了。
Unicode 固然統(tǒng)一了編碼方式,但是它的效率不高,比如 UCS-4(Unicode 的標準之一)規(guī)定用 4 個字節(jié)存儲一個符號,那么每個英文字母前都必然有三個字節(jié)是 0,這對存儲和傳輸來說都很耗資源。
將之前寫有 abc123+-*\
的文件用記事本另存為 unicode 會發(fā)現(xiàn)文件的體積大了一倍。(本來應該是 4 倍,windows 做了優(yōu)化)


utf-8
為了提高 Unicode 的編碼效率,于是就出現(xiàn)了 UTF-8 編碼。UTF-8 可以根據(jù)不同的符號自動選擇編碼的長短。比如英文字母可以只用 1 個字節(jié)就夠了。"漢"字的 Unicode 編碼是 U+00006C49,然后把 U+00006C49 通過 UTF-8 編碼器進行編碼,最后輸出的 UTF-8 編碼是 E6B189。utf-8 中漢字使用 3 個字節(jié)存儲。
'a'.encode('utf-8')
b'a'
'中'.encode('utf-8')
b'\xe4\xb8\xad'
注意為了統(tǒng)一 python3 在內(nèi)存中所有的字符都采用 unicode。
本文作者為檸檬班心藍老師,轉(zhuǎn)載請注明出處。