Subsections
縮排
注釋
類型
數學運算
流程式控制制
資料結構
一、縮排
Python開發人員有意讓違反了縮排規則的程式不能通過編譯,以此來強製程序員養成良好的編程習慣。並且Python語言利用縮排表示語句塊的開始和退出(Off-side規則),而非使用花括弧或者某種關鍵字。增加縮排表示語句塊的開始,而減少縮排則表示語句塊的退出。縮排成為了文法的一部分。
二、注釋
''' 多行注釋
# 單行注釋
三、類型
Python採用動態類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運行時,才做出檢查。
str 一個由字元組成的不可更改的有串列。在Python 3.x裡,字串由Unicode字元組成。eg:'Wikipedia'
bytes 一個由位元組組成的不可更改的有串列。 b'Some ASCII'
list 可以包含多種類型的可改變的有串列 [4.0, 'string', True]
tuple 可以包含多種類型的不可改變的有串列 (4.0, 'string', True)
set, frozenset 與數學中集合的概念類似。無序的、每個元素唯一。 {4.0, 'string', True}
dict 一個可改變的由索引值對組成的無串列。 {'key1': 1.0, 3: False}
int 精度不限的整數 42
float 浮點數。精度與系統相關。 3.1415927
complex 複數 3+2.7j
bool 邏輯值。只有兩個值:真、假 True False
四、數學運算
Python使用與C、Java類似的運算子,支援整數與浮點數的數學運算。大多數數學函數處於math和cmath模組內。前者用於實數運算,而後者用於複數運算
import math
print(math.sin(math.pi/2))
五、流程式控制制
5.1 if Statements
'''Created on 2012-12-17@author: chenll'''x = int(raw_input("Please enter an integer: "));if x < 0: x = 0 print 'Negative changed to zero'elif x == 0: print 'Zero'elif x == 1: print 'Single'else: print 'More';
5.2 for Statements
a = ['cat', 'window', 'defenestrate'];for x in a: print x, len(x);
5.3 break and continue Statements
break 語句和 C 中的類似,用於跳出最近的一級 for 或 while 迴圈。
continue 語句是從 C 中借鑒來的,它表示迴圈繼續執行下一次迭代。
5.4 The range()
如果你需要一個數值序列,內建函數range()可能會很有用,它產生一個等差級數鏈表。
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3)
[0, 3, 6, 9]
5.5 pass Statements
pass 語句什麼也不做。它用於那些文法上必須要有什麼語句,但程式什麼也不做的場合
5.6 Defining Functions 定義函數
過程只是一個沒有傳回值的函數
def add(m,n): print(m+n);add(3,5);
帶有傳回值的函數
def add(m,n): return (m+n); result=add(1,22);print(result);
5.7 More on Defining Functions 深入函數定義
有時需要定義參數個數可變的函數。
5.7.1 Default Argument Values 參數預設值 ,最有用的形式是給一個或多個參數指定預設值。這樣建立的函數可以用較少的參數來調用。
def add(m,n,language=1): print(language); print(m+n);add(3,5);
5.7.2 Keyword Arguments 函數可以通過關鍵字參數的形式來調用,形如"keyword = value"。
def add(m,n,language=1): print(language); print(m+n);add(3,5,language=2);
六、資料結構
Data Structures
6.1 More on Lists 深入鏈表
a = [xx,xxx,xxxx];
a.append(x) 把一個元素添加到鏈表的結尾,
a.insert(i,x) 在指定位置插入一個元素。
remove(x) 刪除鏈表中值為x的第一個元素。如果沒有這樣的元素,就會返回一個錯誤。
pop(i) 從鏈表的指定位置刪除元素,並將其返回。如果沒有指定索引,a.pop() 返回最後一個元素。元素隨即從鏈表中被刪除。
index(x) 返回鏈表中第一個值為 x 的元素的索引。如果沒有匹配的元素就會返回一個錯誤。
count(x) 返回x在鏈表中出現的次數。
sort() 對鏈表中的元素就地進行排序。
reverse() 倒排鏈表中的元素。
Using Lists as Stacks 把鏈表當作堆棧使用
用append() 方法可以把一個元素添加到堆棧頂。用不指定索引的pop() 方法可以把一個元素從堆棧頂釋放出來。
stack = [3, 4, 5];stack.append(6)stack.append(7);for x in stack: print(x);print(stack.pop()); # 7
Using Lists as Queues 把鏈表當作隊列使用
使用 append() 方法可以把元素添加到隊列最後,以0為參數調用 pop() 方法可以把最先進入的元素釋放出來.
queue = ["Eric", "John", "Michael"]queue.append("Terry") queue.append("Graham") print(queue.pop(0)); # Eric
鏈表的三個重要內建函數,filter(), map(), 和 reduce()。
filter(function, sequence) 返回一個sequence(序列),包括了給定序列中所有調用function(item)後傳回值為true的元素。
def f(x): for n in range(2,x-1): if x%n==0: return False; return True;seq = filter(f,range(2,25));for item in seq: print(item); #列印出素數
map(function, sequence) 為每一個元素依次調用function(item)並將傳回值組成一個鏈表返回。
def cube(x): return x*x*x;m = map(cube,range(1,5));for x in m: print(x); #列印出1到5各數的立方
可以傳入多個序列,函數也必須要有對應數量的參數,執行時會依次用各序列上對應的元素來調用函數。如果某些序列比其它的短,就用None來代替
seq = range(8)def add(x, y): return x+yseq = map(add, seq, seq)for x in seq: print(x);
reduce(function, sequence) 返回一個單值,它是這樣構造的:首先以序列的前兩個元素調用函數,再以傳回值和第三個參數調用,依次執行下去。
def add(x,y): return x+y;sum = reduce(add,range(1,11));print sum;
6.2 The del statement
6.3 元組(Tuples)和序列(Sequences)
6.4 Sets 集合
6.5 Dictionaries
6.6 Looping Techniques 迴圈技術
在字典中迴圈時,關鍵字和對應的值可以使用 items() 方法同時解讀出來。
knights = {'gallahad': 'the pure', 'robin': 'the brave'}for k, v in knights.items(): print k, v
在序列中迴圈時,索引位置和對應值可以使用 enumerate() 函數同時得到。
for i, v in enumerate(['tic', 'tac', 'toe']): print i, v# 0 tic 1 tac 2 toe