閱讀本文需要4.66分鐘
<!--more-->
有其他計算機語言基礎的同學,閱讀本篇基礎部分建議1到2分鐘。
- 基礎類型、變量和字符編碼
- list 和 tuple
第一、基礎類型、變量和字符編碼
計算機能處理的數據類型有很多,包括文本、圖形、音頻、視頻等等的。上層語言對其不同的數據,定義了各自不同的數據類型。如Java的int、String、boolean,JS的var等等的。Python也不例外:
1.1 基礎類型
-
整數
Python可以處理任意大小的整數,包括負整數。1、100、-9191等等。
-
浮點數
浮點數也就是小數。之所以稱之爲浮點數。是因爲其小數點是可變的,比如:1.23x10^5 和12.3x10^4是一樣的。也就是類似的科學計數法 1.23e5和12.3e4。因此浮點數在計算機存儲的時候可能就會有四捨五入的情況
-
字符串
' 或者 "括起來的任意文本
-
布爾值
True和False, 同時可以使用
and
or
not
來運算 -
空值 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中常用到的基礎類型和集合,玩一玩吧...少年