天天看點

[第二節]python字元編碼,初識子產品,位元組碼及互動式輸入

一, python字元編碼: 

python解釋器在加載".py"檔案中的代碼時,會對内容進行編碼(預設ASCII). 

1. ASCII(American Standard Code for Information Interchange,美國标準資訊交換代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言,其最多隻能用8位來表示(一個位元組),即2**8 = 256,是以ASCII碼最多隻能表示 256 個符号。 

顯然ASCII碼無法将世界上的各種文字和符号全部表示,是以就需要新出一種可以代表所有字元和符号的編碼,即Unicode. 

2. Unicode字元編碼: 

Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字元編碼。Unicode 是為了解決傳統的字元編碼方案的局限而産生的,它為每種語言中的每個字元設定了統一并且唯一的二進制編碼,規定所有的字元和符号最少由16位來表示(至少2個位元組),即2**16 = 65536. 

Unicode的出現解決了傳統的字元編碼方案的局限,但是卻引出了另一個問題,即浪費空間;于是就又有了一種字元編碼UTF-8. 

3. UTF-8字元編碼 

UTF-8是對Unicode編碼的壓縮和優化,它不再使用最少2個位元組,而是将所有的字元和符号進行分類:ascii碼中的内容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存等等.(一個位元組用8位表示)。

注:

python2.7版本預設使用的是unicode編碼. 

python3.x版本預設使用utf-8編碼,不用再在代碼前加"_*_ coding:utf-8 _*_ . 

二, Python代碼書寫格式:

第一行:解釋器.

第二行:編碼.

三,初識子產品和位元組碼:

Python有大量的子產品,進而使得開發Python程式非常簡潔。類庫有包括三中:

Python内部提供的子產品

業内開源的子產品

程式員自己開發的子產品

示例:使用程式員自己開發的子產品 

<code>root@Python:</code><code>/python/python3</code><code># ls</code>

<code>master.py   slave.py</code>

<code>root@Python:</code><code>/python/python3</code><code># cat master.py </code>

<code>#!/usr/bin/env python</code>

<code># _*_ coding:utf-8 _*_ </code>

<code>import</code> <code>slave</code>

<code>print(</code><code>"master"</code><code>) </code>

<code>root@Python:</code><code>/python/python3</code><code># cat slave.py </code>

<code>print(</code><code>"slave"</code><code>) </code>

<code>root@Python:</code><code>/python/python3</code><code># python slave.py </code>

<code>slave</code>

<code>root@Python:</code><code>/python/python3</code><code># python master.py </code>

<code>master</code>

<code>root@Python:</code><code>/python/python3</code><code># //子產品導入成功.</code>

四,位元組碼 - pyc檔案 

執行Python代碼時,如果導入了其他的 .py 檔案,那麼,執行過程中會自動生成一個與其同名的 .pyc 檔案,該檔案就是Python解釋器編譯之後産生的位元組碼。

注:代碼經過編譯可以産生位元組碼;位元組碼通過反編譯也可以得到代碼。 

例:

<code>root@Python:</code><code>/python/python3</code><code># ls -a</code>

<code>.  ..  master.py  slave.py  slave.pyc</code>

注:.py檔案和.pyc檔案可以借助額外的工具反解.

五,互動式輸入 

raw_input()與input(): 用于和使用者互動,等待使用者輸入内容; 

注:raw_input()函數和input()函數在python2.X/3.x中的差別:

2.x版本:

raw_input(): 輸入的str或int都會被轉化為str type; 

input(): 隻能識别到int type,對于str type會報錯;

3.x版本:

raw_input(): input和raw_input 整合了,沒有了raw_input().

input(): 輸入的str或int都會被轉化為str type;如果要得到int類型,需用int轉換.

注:3.x版本中的input()函數,互動式輸入的内容必須是int類型,即數字,它才能轉換為相應的int類型;如果互動式輸入的内容是str類型,則轉換為int type時會報錯. 

示例:

1)代碼内容: 

<code>root@Python:</code><code>/python/python3</code><code># vim 01.py</code>

<code>name = input(</code><code>"Please input name:"</code><code>)</code>

<code>print(name)</code>

<code>ss = </code><code>type</code><code>(name)</code>

<code>print(ss)</code>

執行結果: 

<code>root@Python:</code><code>/python/python3</code><code># python 01.py</code>

<code>Please input name:yangbin </code><code>//</code><code>輸入内容.</code>

<code>yangbin</code>

<code>&lt;class </code><code>'str'</code><code>&gt;  </code><code>//</code><code>執行結果.</code>

<code>Please input name:1212  </code><code>//</code><code>輸入内容.</code>

<code>1212</code>

<code>root@Python:</code><code>/python/python3</code><code>#</code>

2)代碼内容: 

<code>#!/usr/bin/env python </code>

<code>name = int(input(</code><code>"Please input name:"</code><code>))</code>

執行結果:

<code>Please input name:yangbin  </code><code>//</code><code>輸入str類型後轉換報錯.</code>

<code>Traceback (most recent call last):</code>

<code>  </code><code>File </code><code>"01.py"</code><code>, line 4, </code><code>in</code> <code>&lt;module&gt;</code>

<code>    </code><code>name = int(input(</code><code>"Please input name:"</code><code>)) </code>

<code>ValueError: invalid literal </code><code>for</code> <code>int() with base 10: </code><code>'yangbin'</code>

<code>root@Python:</code><code>/python/python3</code><code># python  01.py</code>

<code>Please input name:1212  </code><code>//</code><code>輸入int類型後轉換成功.</code>

<code>&lt;class </code><code>'int'</code><code>&gt;</code>

在互動式模式下,當輸入密碼時,如果想要密碼不可見,需要利用getpass子產品中的getpass方法。

<code>#!/usr/bin/env python  </code>

<code>import</code> <code>getpass  </code>

<code>pwd</code> <code>= getpass.getpass(</code><code>"請輸入密碼:"</code><code>) </code>

<code>print(</code><code>pwd</code><code>)</code>

<code>root@Python:</code><code>/python/python3</code><code># python 02.py</code>

<code>請輸入密碼:   </code><code>//</code><code>此處輸入密碼不可見.</code>

<code>123456  </code><code>//print</code><code>顯示出了密碼.</code>

第二節完成!

本文轉自 羽豐1995 51CTO部落格,原文連結:http://blog.51cto.com/13683137989/1895528