在內存中存儲的數據可以有多種類型。Python 定義了一些標準類型,用於存儲各種類型的數據。
數據類型分為:
- 可變
- 不可變兩種。不可改變的數據類型,這意味著改變數字數據類型會分配一個新的對象。
Python中的每種數據類型都有構造函數,構造函數名稱就是類型名稱,如:int()、float()等。構造函數也可用於類似於C++的強制類型轉換。
一、numeric
[不可變]
數字數據類型用於存儲數值。
A、int(有符號整型)
B、long(長整型[也可以代表八進制和十六進制]),Python使用 L/l 來顯示長整型。
C、float(浮點型),Python將帶小數點的數字都稱為浮點數。
D、complex(複數),複數由實部和虛部構成,可以用 a + bj,或者 complex(a,b) 表示, 實部和虛部都是浮點型。
默認值:int() - 0,float() - 0.0,long() - 0,complex() - 0j
二、布爾
在Python中的布爾類型為 <type>,取值為 True 、False。/<type>
默認值 bool() - False。
認為空對象(整數0,浮點數0.0,空字符'')是False,所有非空對象是真。
三、str "xxx"或者'xxx'
[不可變][索引]
字符串是由數字、字母、下劃線組成一系列字符。Python不支持單字符類型,只有字符串類型,單字符也在Python也是作為一個字符串使用。ord/chr在ASCII與字符之間進行轉換。
默認值:str() - ''
python的字串列表有2種取值順序:
A、從左到右索引默認0開始的,最大範圍是字符串長度少1
B、從右到左索引默認-1開始的,最大範圍是字符串開頭
在Python中定義unicode字符串,需要在字符串之前增加u/U。使用type分別查看以下變量的類型
str1 = u"nihao" # <type>
str2 = "nihao" #<type>
計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。Unicode標準也在不斷髮展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode。
ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼通常是2個字節,舉例如下。
字母 A 用ASCII編碼是十進制的65,二進制的01000001;
字母 A 用Unicode編碼,只需要在前面補0就可以,因此, A 的Unicode編碼是00000000 01000001。
漢字已經超出了ASCII編碼的範圍。
python中字符串是不可修改對象。每次+=會創建一個新的字符串,性能較差,推薦使用 jion
print 使用對象的 __str__方法
- 初始化
方式一:str() 構造函數,可以將非字符串值表示為字符串。
方式二:使用 '' 或者 ""
- 其他對象轉換為str
str():函數,將其他對象轉換為可閱讀的str形式,主要調用對象的__str__方法,使用其返回值。
- 轉義字符 - 見附錄五
如果需要打印轉子字符,則可以通過兩種方式實現:\\\\n 或者 R'\\n'、r'\\n'
- 格式字符串
Python提供了更精細的字符串顯示控制方法,通過選項功能實現。有以下兩種方式:
1、在 Python 中,字符串格式化使用與 C 中 sprintf 函數一樣的語法。
print "fromat string" % (data1, data2, data3, ...) # dataN 與format string 中的%$ 相匹配。%是分隔符
每個format string的格式如下:%[name][flags][width][.precision]code
print "My name is %s and weight is %d kg!" % ('Zara', 21)
2、str.format() - Python2.6開始加入
增強了字符串格式化的功能,基本語法是通過 {} 和 : 來代替以前的 %。format 函數可以接受不限個參數,位置可以不按順序。
A、不設置指定位置,按默認順序 "{} {}".format("1", "2") # 1 2
B、設置指定位置 "{1} {0} {1}".format("1", "3") # 3 1 3
C、設置參數
key=root
a、具體參數
"{name} = {value}".fromat(name="key", value="root")
b、字典設置參數
info={"name":"key", "value":"root"}
"{name} = {value}".format(**info)
c、列表設置參數
info=["key", "root"]
"{0[0]} = {0[1]}"format(info) # 0是必須的
d、對象
class info(object):
def __init__():
self.name="key"
self.value="root"
"{0.name} = {0.value}".format(info())
說明:粗體0表示的是format後跟的參數位置
- 字符串拼接
1、+,可以使用Python的操作符重載功能,str內部實現了 __add__,直接將兩個str拼接起來。
2、jion,連接字符串數組。"split".jion(seq) # 將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串
":".jion("12345") # "1:2:3:4:5"
- 三引號
三引號的語法是一對連續的單引號或者雙引號, 允許一個字符串跨多行,字符串中可以包含換行符、製表符以及其他特殊字符。如果字符串跨越多行,行與行之間的回車也會被保留。
三引號讓程序員從引號和特殊字符串的泥潭裡面解脫出來,自始至終保持一小塊字符串的格式是所謂的WYSIWYG(所見即所得)格式的。
多用於處理HTML或者SQL語句中。
errHTML = """
<title>Friends CGI Demo
/<title>ERROR
%s
"""
兩個作用:
1、用作文檔註釋
2、初始化字符串變量,保留特殊字符
四、list []
[可變] [複合數據類型][有序][索引]
列表由一系列按特定順序排列的元素組成的有序集合,其中元素與元素之間沒有任何關係。
使用 [] 標識列表,元素與元素之間使用,分割。可以完成大多數集合類的數據結構實現。它支持字符,數字,字符串甚至可以包含列表。列表中的每個元素都分配一個數字表示元素的索引,元素的索引規則類似於str。
使用 [:]操作可以複製列表,列表中已經存在的元素指向同一對象,新加的元素不影響原有列表。
list1 = [1, 2, 3]
list2 = list1[:] # id(list1[0]) == idlist2([0])
# list2.append(4) 不影響 list1
- 初始化
1、空列表 []
2、[str, int, list, long, ……]
3、list() 構造函數,list(range(begin, end)) 創建參數列表範圍內的整數列表。
4、列表解析,使用緊湊的方式創建列表。
[expression for-clause [condition]] # [elem for elem in range(1,10) if elem % 2 == 0]
expression:對每個元素執行的操作,結果當作列表的元素。# elem
for-clause:for操作的一個列表 # for elem in range(1, 10)
condition:可選的附加條件,符合條件的元素會執行expression操作。 # if elem % 2 == 0
- 增加
list.insert(index, elem),任意位置插入元素
list.append(emel),列表末尾添加元素
- 訪問元素
採用下標法,類似於 str ,可以使用正向從0開始,也可以採用反向從-1開始。
- 刪除元素
del list[index] 刪除單個元素
list.pop(index) 刪除並返回指定位置的元素
list.remove(elem) 刪除首次出現的元素
五、tuple ()
[不可變][索引]
使用 () 標識元組,可以把元組理解成不可變的list。
- 初始化
1、空元組 ()
2、(data, ),單元素元組,需要在元素後面添加逗號。這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號。所以,如果元組只有1個元素,就必須加一個逗號,防止被當作括號運算。此時表示圓括號正在成為元組創建的一部分。
3、(data, data1, data2, …) 或者 data, data1, data2, … 都可以創建元組
4、tuple(list) 通過列表構建元組
- 刪除元組
因為元組是不可變的,所以del不能刪除其中的一個元素,但是可以使用del刪除整個元組,類似於刪除變量關聯的操作一樣。
六、dict {}
[可變][無序]
使用 {} 標識字典,由索引(key)和它對應的值value組成。字典的每個鍵值對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中。
Python為了實現快速搜索,鍵沒有按順序排列,自動修改排列順序。
- 鍵:鍵必須不可變,任意Python不可變數據類型均可當作dict的鍵,不允許同一個鍵出現兩次
- 值:值可以沒有限制地取任何python對象,既可以是標準的對象,也可以是用戶定義的。
- 初始化
1、空字典:{}、dict()
2、初始化字典:{key:value, key:value, ……}
3、dict() 構造函數,藉助zip運算符:dict(zip(list_k, list_v))
- 新增、修改、訪問元素
通過dict[key]的形式進行標題提到的操作。
- 刪除
dict.clear() 刪除字典中的所有元素
del dict[key] 刪除指定的key以及key對應的值
- 方法
items()、keys()、values():返回列表形式
6copy()淺拷貝字典,如果值是可變的則會影響所有引用
七、set
[可變][唯一][無序]
為集合類型,是含有不重複元素的數據集。支持數據集合中的概念。set沒有快捷創建的方式,其輸出格式為 set([data, …])的形式。
- 初始化
集合只能通過構造函數創建沒有快捷方式。
1、空集合 set()
2、set(str/list) 通過str或者list創建集合。
- 操作
1、元素操作(方法):add、remove、clear2、支持數學集合的操作,改操作通過集合的方法實現。
相關操作
1、分片
在分片規則裡list、tuple、str(字符串)都可以稱為序列,都可以按規則進行切片操作。
[begin:end:step]
[begin, end) 選取範圍,左閉右開。begin默認值為0,end默認值為末尾
step 表示增長步長,默認為1。負數步長意味著向後進行,此時begin,end都是用默認值。
2、for
遍歷元素,可以使用的數據結構有:str、list、tuple、dict、set
for elem in xxxx:
block
3、判空
A、可以直接將對象當作 if/while 等條件語句的 expression,來判斷是否為空。支持的數據結構有:str、list、tuple、dict、set
if dict: # 如果不為空
pass
B、可以使用 len(o) 函數來判斷集合的長度。
if len(dict): #如果不為空
pass
4、排序
list[dict] 可以指定多個排序條件
- list.sort(key=lambda dict:(dict["key"], dict["key2"], …))
- list.sort(key=operator.itemgetter("key1", "key2", …)) # import operator
閱讀更多 寒江雪orz 的文章