Python學習筆記--Python基礎

Azoobie發表於2016-10-27

本文為廖雪峰Python教程的學習筆記
具體內容,可參考如下連結:
http://www.liaoxuefeng.com/


1. 字串  

 字串是以單引號’或雙引號”括起來的任意文字。”或”“本身只是一種表示方式,不是字串的一部分。
 如果’本身也是一個字元,可以用”“括起來,比如”I’m OK”。
 如果字串內部既包含’又包含”,可以用轉義字元\來標識。  
 Python還允許用r”表示,”內部的字串預設不轉義。但如果字串以\結尾,會報錯。
 如果字串內部有很多換行,用\n寫在一行裡不好閱讀,為了簡化,Python允許用”’…”’的格式表示多行內容。多行字串”’…”’還可以在前面加上r使用。
 字串為不可變物件,可以通過下標訪問字串特定位置的字元,但不能改變。

2. 空值  

 空值是Python裡一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。

3. 除法  

 在Python中,有兩種除法。
 一種除法是/,/除法計算結果是浮點數,即使是兩個整數恰好整除,結果也是浮點數;
 還有一種除法是//,稱為地板除,兩個整數的除法仍然是整數。

4. 字串和編碼  

 ASCII編碼是1個位元組。
 Unicode編碼把所有語言都統一到一套編碼裡,通常是2個位元組,如果要用到非常偏僻的字元,就需要4個位元組。
 UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。
 在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。
 例如,用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到文;瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器。
 在Python 3版本中,字串是以Unicode編碼的,也就是說,Python的字串支援多語言。
 對於單個字元的編碼,Python提供了:
 ord()函式獲取字元的整數表示。
 chr()函式把編碼轉換為對應的字元。
 由於Python的字串型別是str,在記憶體中以Unicode表示,一個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str變為以位元組為單位的bytes。
 Python對bytes型別的資料用帶b字首的單引號或雙引號表示。’ABC’和b’ABC’,前者是str,後者雖然內容顯示得和前者一樣,但bytes的每個字元都只佔用一個位元組。
 encode()函式可以將Unicode表示的字串編碼為指定的bytes,bytes中無法顯示為ASCII字元的位元組用\x##顯示。

#str轉換為ASCII碼
'ABC'.encode('ascii')
#中文轉化為UTF-8,只能用UTF-8編碼為bytes
'哈哈'.encode('utf-8')

 decode()函式將bytes變為str。(從網路或磁碟上讀取的位元組流是bytes)
 由於Python原始碼也是一個文字檔案,所以,當原始碼中包含中文的時候,在儲存原始碼時,就需要指定儲存為UTF-8編碼。當Python直譯器讀取原始碼時,為了讓它按UTF-8編碼讀取,我們通常在檔案開頭寫上這兩行:

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

 第一行註釋是為了告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個註釋;
 第二行註釋是為了告訴Python直譯器,按照UTF-8編碼讀取原始碼,否則,原始碼中的中文輸出可能會有亂碼。

5. 格式化字串

 Python的格式化方式與C語言一致。用%實現。

'Hi, %s, I\'m %d years old.' % ('Mike', 23)
"Hi, Mike, I'm 23 years old."

 在字串內部,%s表示用字串替換,%d表示用整數替換,%f表示用浮點數替換,%x表示十六進位制整數,%%來表示一個%。有幾個%?佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括號可以省略。
 格式化整數和浮點數還可以指定是否補0和整數與小數的位數:

'%2d-%02d' % (3, 1)  
' 3-01'  
'%.2f' % 3.1415926  
'3.14''  

 格式化字串的時候,可以用Python的互動式命令列測試,方便快捷。

6. list & tuple

 list為有序列表,可以包含不同的資料型別。初始化後可以修改。

L = ['a', 'b']

 append(ele)函式追加元素ele到list末尾。
 insert(index, ele)函式將元素ele插入到index處。
 pop()函式刪除list末尾元素。包含引數index,刪除index處元素。
 
 tuple也為有序列表,一旦初始化就不能修改,指向永遠不變。元素在定義的時候就要確定。因為不可變,所以程式碼更安全。

#定義包含一個元素的tuple,如果沒有,表示數字1
t = (1, )

7. dict & set

 dict使用鍵-值儲存,查詢速度快,一個key只能對應一個value。
 key必須為不可變物件。

#dict的初始化
d = {'name1': 1, 'name2': 2, 'name3': 3}
d['name4'] = 4
d['name4']

 如果key不存在,dict會報錯。通過in語句判斷key是否存在,也可以通過get()方法判斷,如果key不存在,返回None,或者自己指定的值。

#判斷'name1'是否存在
'name1' in d
d.get('name1')
#不存在返回-1
d.get('name1', -1)

 set是一組不重複的key的集合。建立set需要提供一個list作為輸入集合。
 add(key)方法新增元素到set中。
 remove(key)刪除元素。
 兩個set可以做交(&), 並(|)運算。

s = set([1,2,3])
s.add(4)

8. 不變物件 & 可變物件

 str是不變物件,而list是可變物件。對於不變物件來說,呼叫物件自身的任意方法,也不會改變該物件自身的內容。相反,這些方法會建立新的物件並返回,這樣,就保證了不可變物件本身永遠是不可變的。
 例如,當我們對str型別a呼叫a.replace(‘a’, ‘A’)時,實際上呼叫方法replace是作用在字串物件’abc’上的,而這個方法雖然名字叫replace,但卻沒有改變字串’abc’的內容。相反,replace方法建立了一個新字串’Abc’並返回,如果我們用變數b指向該新字串,就容易理解了,變數a仍指向原有的字串’abc’,但變數b卻指向新字串’Abc’了。

相關文章