上面是兩個列表推導式,裡面包含有lambda表示式。輸出結果分別為:def t1():
func1 = [lambda x: x*i for i in range(10)]
result1 = [f1(2) for f1 in func1]
print result1
def t2():
func2 = [lambda x, i=i: x*i for i in range(10)]
result2 = [f2(2) for f2 in func2]
print result2
在上面的例子中,列表解析會生成一系列的函式物件。例如[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
會產生乙個名為func的函式物件。注意不同於func(),加上小括號以後,此時變為了呼叫函式物件。def func():
pass
函式物件只有在呼叫的時候才開始對內部的變數進行引用。在t1()方法中,對i來說, 當函式對它引用的時候, 它已經變為9, 所以10個函式都引用了i=9。
而對於t2()方法來說,lambda函式相當於變成接受兩個引數了,所以返回了不一樣的結果。
上面的**,輸出的結果為:def t3():
func3 = (lambda x: x*i for i in range(10))
result3 = [f3(2) for f3 in func3]
print result3
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
此時,相當於把列表推導式變成了生成器,結果又不一樣了!
對於生成器, 只有你需要的時候它才會求值, 這也是和列表解析式的區別, 列表解析式只要你執行, 馬上就把i變為了9, 可是生成器不會, 當你呼叫第乙個函式的時候, 他把相應的i求出來, 然後停止, 等你下一次呼叫, 這個就完美符合我們的預期了.
python中的列表推導式
類似於這樣 x for x in range 101 x for x in range 10 if x 2 0 x y for x in range 10 for y in range 10 式子,就叫做列表推導式 列表推導式的好處就是能快速生成列表 列表推導式的好處就是浪費記憶體 空間複雜度太大 ...
python中的列表推導式
python裡面有個很棒的語法糖 syntactic sugar 它就是list comprehension,有人把它翻譯成 列表推導式 也有人翻譯成 列表解析式 名字聽上去很難理解,但是看它的語法就很清晰了。雖然名字叫做 list comprehension,但是這個語法同樣適用於dict set...
python中的列表推導式
所謂的列表推導式,就是指的輕量級迴圈建立列表。建立乙個0 10的列表 a x for x in range 11 print a 輸出結果 0,1,2,3,4,5,6,7,8,9 上面的列表推導式等價於下面,只是 非常簡化。a for x in range 10 建立乙個1 10之間偶數的列表 a ...