所有測試語句基于Python 2.7.3 , Ubuntu 12.04
自學Python,如果哪里說的不恰當,還請指正。謝謝。
示例絕大部分來自博客園vamei的python教程
#!/usr/bin/env python#coding=UTF-8#包含一個next()方法 每次循環調用next()#直到StopIteration異常出現 停止調用next()方法f = open('test.txt')for line in f: PRint line

#生成器 自定義一個循環對象#定義與函數類似 只是return改為yield#每次循環使用一個yield的返回值def gen(): a = 10 yield a a = a**2 yield a a = a+10 yield a yield 525#該生成器共有4個yield,用作循環器時,會進行4次循環for a in gen(): print a

生成器 generator
#對于形如下的是生成器 可以簡寫為 G = ( x for x in range(m))# 名為生成器表達式 (Generator Expression)def gen(): for i in range(4): yield iG = (x for x in range(4))for a in G: print a
表推導
#表推導 list comprehension 快速生成表#表推導的機制 實際上是利用了循環對象L = []for i in range(10): L.append(i*2) print L#簡寫形式 使用中括號L = [x*2 for x in range(10)]print L
測試練習:
#test zip() 聚合函數#聚合后 [(1,7),(3,12),(5,13)]#設定y>10 所以 x取3和5. L=[6,10]a = [1,3,5]b = [7,12,13]L = [x*2 for (x,y) in zip(a,b) if y > 10]print L
函數也是對象,將函數名作為參數傳遞
def func(a, b): return a + bdef test(f, a, b): print 'test' print f(a, b)test(func, 1, 2)
test函數的第一個參數f就是一個函數對象。將func傳遞給f,test中的f()就擁有了func()的功能。
map()函數
def func(a, b): return a + b# map()的功能是將函數對象依次作用于表的每一個元素# 每次作用的結果儲存于返回的表re中# map()將每次從兩個表中分別取出一個元素,帶入所定義的函數。re = map(func, [1, 2, 3, 4], [2, 3, 4, 5])print re
filter()函數 filter通過讀入的函數來篩選數據
def func(a): if a > 100: return True else: return Falseprint filter(func, [10, 99, 101, 500])
返回結果為 [101,500]
在Python 3.X中,filter返回的不是表,而是循環對象。
reduce()函數 要求函數自身能接收兩個參數。reduce可以累進地將函數作用于各個參數。
def func(a, b): return a * bre = reduce(func, [1, 2, 3, 4])print re

reduce()函數在3.0里面不能直接用的,它被定義在了functools包里面,需要引入包
異常 與其他高級語言異常處理差別不大 只是關鍵字有變化 另外多了一個else 的分支
try: ...except exception1: ...except exception2: ...except: ...else: ...finally: ...
流程如下,
try->異常->except->finally
try->無異常->else->finally
在try程序段中,我們放入容易犯錯的部分。我們可以跟上except,來說明如果在try部分的語句發生StopIteration時,程序該做的事情。如果沒有發生異常,則except部分被跳過。隨后,程序將繼續運行,而不是徹底中斷。如果try中有異常發生時,將執行異常的歸屬,執行except。異常層層比較,看是否是exception1, exception2...,直到找到其歸屬,執行相應的except中的語句。如果except后面沒有任何參數,那么表示所有的exception都交給這段程序處理。如果無法將異常交給合適的對象,異常將繼續向上層拋出,直到被捕捉或者造成主程序報錯。
新聞熱點
疑難解答