標籤:python python物件類型
對象是記憶體中的一部分,包含數值和相關操作的集合。python可以分解成模組、語句、運算式以及對象:程式由模組構成、模組包含語句、語句包含運算式、運算式建立並處理對象。
1.1、為什麼使用內建類型?
使用c或c++,很大一部分工作集中於對象,需要部署記憶體結構、管理記憶體配置、實現搜尋和讀取進程。而python不是這樣,它提供了強大的物件類型作為語言的組成部分。
除非有內建類型無法提供的特殊對象要處理,所以最好總是使用內建對象而不是使用自己的實現。
1.2、python核心的資料類型
函數、模組和類這樣的編程單元在python中也是對象,它們是由def、import、class這樣的運算式和語句建立;一個方括弧的運算式會產生一個列表,大括弧的運算式會建立一個字典;python中沒有型別宣告,啟動並執行運算式的文法決定了建立和使用的對象的類型;一旦建立了一個對象,它就和操作集合綁定了-只可以對字串進行字串相關的操作。python是動態類型的(它自動地跟蹤變數的類型),但是它是強型別語言。列表提供了其他對象的有序集合,而字典是通過鍵儲存物件的。列表和字典都可以嵌套,可以隨需求擴充和刪減,並能夠包含任意類型的對象。
print(sys.modules) ##只列出當前已經import的module,磁碟上沒有import的模組不會被列出來
{‘tokenize‘: <module ‘tokenize‘ from ‘/usr/lib64/python2.6/tokenize.pyc‘>, ‘copy_reg‘: <module ‘copy_reg‘ from ‘/usr/lib64/python2.6/copy_reg.pyc‘>}
1.2.1、數字
+、*、**(表示乘方)
len(str(2**1000000))/random.random()/random.choice([1,2,3,4])
1.2.2、字串
序列中的元素包含了一個從左至右的順序-序列中的元素根據它們的相對位置進行儲存和讀取。嚴格講,字串是單個字元的字串的序列。
字串的正反向索引操作和分區操作。分區的一般形式x[i:j],表示取出在x中從位移量i開始,直到但不包括位移量為j的內容。分區中,左邊界預設是0,並且右邊界預設為分區序列的長度。+(字串合併作業)、*(字串重複操作)一個方法的意義取決於被操作的對象,這種多態的特性給python代碼帶來了很大的簡潔性和靈活性。由於類型並不受約束,python編寫的操作通常可以自動地適用於不同類型的對象。
1.2.3、不可變性
不可變性:建立後不能就地改變
python中每一個對象都可以分為不可變性或可變性。核心類型中,數字、字串和元組是不可變的;列表和字典是可變的。
1.2.3、類型的方法
一條簡單的法則是這樣的:可作用於多種類型的通用型操作都是以內建函數和運算式的形式出現的,例如len(x)、x[0],但是類型特定的操作都是以方法調用的形式出現的。
1.3、模式比對
re模組包括了類似搜尋、分割和替換等調用。
1.4、列表
python的列表與其他語言中的列表類似;python的列表沒有固定類型的約束;python列表沒有固定大小,可以按需擴充或縮減列表大小。
1.4.1、列表的序列操作
>>> l=[123,‘spam‘,1.23]
>>> dir(l)
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]
1.4.2、類型特定的操作
>>> l
[1.23, ‘spam‘, 123]
>>> l.sort()
>>> l
[1.23, 123, ‘spam‘]
>>> l.reverse()
>>> l
[‘spam‘, 123, 1.23]
1.5、嵌套
python核心資料類型的一個優秀特性就是它們支援任意的嵌套,能夠以任意的組合對其進行嵌套,並可以多層進行嵌套。
1.6、pass語句是無運算的佔位語句,當文法需要語句並且沒有任何實用的語句可寫時,就可以使用它。
while <test>:
<statements1>
else:
<statements2>
python不允許賦值語句出現在應該是運算式出現的地方;C語言賦值運算會返回被賦值後的值,但python賦值語句只是語句,不是運算式。
for迴圈時python中一個通用的序列迭代器:可以遍曆任何有序的序列內的元素,for語句可用於字串、列表、元組、其他內建可迭代對象以及之後能夠通過類所建立的新對象
for <target> in <object>
<statements>
if <test>: break
if <test>: continue
else:
<statements> ##if we didn‘t hit a break
python運行for迴圈時,會逐個講序列對象中的元素賦值給目標,然後為每個元素執行迴圈主體。
1.7、迴圈計數器:while、range
range函數是通用的工具,range常用在for迴圈中產生索引,但是也可以用在任何需要整數列表的地方。
range函數使用一個參數時,range會產生從0算起遞增1的整數列表,但其中不包含該參數的值;當有2個參數時,第一個視為下邊界;當有3個參數時,第三個參數提供步進值。eval函數:eval(str [,globals [,locals ]]) ,可以用來講字串str當成有效python運算式求值,並返回計算結果
1.8、並行遍曆:zip和map
內建函數range可以在for迴圈中以非完備的方式遍曆序列;for (x,y) in zip(list1,list2),for迴圈使用元組賦值運算來解包zip結果中的每一個元組。
使用dict建構函式,可以把列表或zip過的鍵/值對列表,轉換為字典類型;什麼是列表解析和python3.0的字典解析??
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
python之路-------第4章、介紹python物件類型