Python新手引導 第三篇-Python基礎和字符編碼

閱讀本文需要4.66分鐘

<!--more-->

有其他計算機語言基礎的同學,閱讀本篇基礎部分建議1到2分鐘。

  1. 基礎類型、變量和字符編碼
  2. list 和 tuple

第一、基礎類型、變量和字符編碼

計算機能處理的數據類型有很多,包括文本、圖形、音頻、視頻等等的。上層語言對其不同的數據,定義了各自不同的數據類型。如Java的int、String、boolean,JS的var等等的。Python也不例外:

1.1 基礎類型

  1. 整數

    Python可以處理任意大小的整數,包括負整數。1、100、-9191等等。

  2. 浮點數

    浮點數也就是小數。之所以稱之爲浮點數。是因爲其小數點是可變的,比如:1.23x10^5 和12.3x10^4是一樣的。也就是類似的科學計數法 1.23e5和12.3e4。因此浮點數在計算機存儲的時候可能就會有四捨五入的情況

  3. 字符串

    ' 或者 "括起來的任意文本

  4. 布爾值

    True和False, 同時可以使用and or not來運算

  5. 空值 Python中使用None來表示空值,其不是0的意義

1.2 變量

變量在程序中就是用一個變量名標書,且區分大小寫,可用數字_表示,並不能以數字開始

a = 'aaa'

  • Python解釋器會在內存中創建aaa的字符串
  • 並在內存中創建一個名爲a的變量,並將其指向aaa

1.3 字符編碼

最原始的由歪果仁定義的ASCII編碼,使用127個字符,從A(65)到z(122). 其次就是各國的編碼,如我們所知的GB2312將中文編進去。還有其他國家的類似,日本的Shift_JIS等等。如此一來,你會發現各國都有自己的編碼,那麼豈不是各種亂碼。
因此Unicode就因此誕生了。Unicode將所有編碼統一到了一套編碼中,這樣就解決了亂碼的問題。

Unicode和ASCII編碼的區別:Unicdeo使用兩個字節、ASCII使用一個字節

  • 舉個栗子
字符 ASCII Unicode
A 十進制(65),二進制(01000001) 0A (00000000 01000001)

因此你會發現如果你的文本全是英文的,使用Unicode編碼的話,那麼需要多一倍的存儲空間,導致存儲和傳輸上十分低效率。

UTF_8應景而生,是一種可變長編碼.UTF_8編碼把一個Unicode字符根據不同的數組大小編碼成1-6個字節,常用的英文被編碼成1個字節,漢字使用3個字節。如果要傳輸的文本包含大量的英文字符,用UTF-8編碼能節省很多空間:

字符 ASCII Unicode UTF-8
A 十進制(65),二進制(01000001) 0A (00000000 01000001) 01000001
01001110 00101101 11100100 10111000 10101101

所以在計算機的內存中,統一使用Unicode編碼,但是需要保存到硬盤或者傳輸的時候,就會使用到UTF-8編碼。因此在計算機上打開某個文本的時候,會首先以Unicode將其獨到內存中,當修改保存的時候,又會使用UTF-8。

使用Unicode表示的str可以通過encode()轉換爲指定的bytes,例如:

  • >>> ‘A’.encode('ascii')
  • b'A'
  • >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
  • '中文'

len()可計算str包含多少個字符,len('abc') = 3

在操作字符串時,我們經常遇到str和bytes的互相轉換。爲了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

由於Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存爲UTF-8編碼。當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第二、List和tuple

集合在每個語言中都有,當然Python也不例外。

2.1 List

Python內置的列表數據類型。一種有序的集合,可隨時添加和刪除其中元素

name = ['Mark','xiyouMc','Alison']

訪問方式可直接通過索引: name[0] name[1] 當然索引是從0開始到len(name) - 1 區別去其他語言,Python可以通過 name[-1]訪問到最後一個元素,一次類推 -2可以訪問到倒數第二個。

list是一個可變的有序表,所以可以在list的末尾追加元素: name.append('Ali')

同樣也可以插入元素, name.insert(1,'Baidu')

刪除尾部元素使用pop(),並可以指定刪除某個元素 pop(1)

賦值(替換): name[1] = 'Tencent'

多層List:s = ['Mark','java',['nlp','php']],這樣通過 s[2]拿到的也是一個list. 當然要拿到 nlp的話,直接s[2][1]即可

2.2 tuple

和List一樣,tuple也是一個有序列表。唯一和list有區別的就是 tuple一旦被初始化就不能修改

name = ('Mark','Alison','xiyouMc')

即tuple沒有 append insert函數。

a = (1,)表示只有一個元素的tuple.

當然如果tuple中包含list那麼這個list是可變的,因此tuple中保存的只是list的指針,如:

a = ('A',['B','C'])
a[1][1] = 'D'
('A',['D','C'])

小結

本篇主要講了計算機的基礎知識--編碼,看過這篇文章之後,以後遇到亂碼的問題,相信你不用再百度了。 其次就是Python中常用到的基礎類型和集合,玩一玩吧...少年

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章