小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

lambda的一些用法

 Tech-d 2013-08-14

lambda的用途:

1. 使用Python寫一些執(zhí)行腳本時,使用lambda可以省去定義函數(shù)的過程,讓代碼更加精簡。

2. 對于一些抽象的,不會別的地方再復用的函數(shù),有時候給函數(shù)起個名字也是個難題,使用lambda不需要考慮命名的問題。

3. 使用lambda在某些時候讓代碼更容易理解。

lambda語句中,冒號前是參數(shù),可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是一個函數(shù)對象,見證一下:

= lambda x : x**2
print g

<function <lambda> at 0x00AFAAF0>

Python中,有幾個定義好的全局函數(shù)方便使用的,他們就是filtermapreduce。

>>> foo = [218922172481227]
>>>
>>> print filter(lambda x: x % 3 == 0, foo)
[
189241227]
>>>
>>> print map(lambda x: x * 2 + 10, foo)
[
144628544458263464]
>>>
>>> print reduce(lambda x, y: x + y, foo)
139

map一句可以寫為:

print [x * 2 + 10 for x in foo]

非常的簡潔,易懂。filter的例子可以寫成:

print [x for x in foo if x % 3 == 0]


使用lambda的時候,需要注意作用域的問題。如想創(chuàng)建一個函數(shù)數(shù)組fs=[f0,...,f9] where fi(n)=i+n, 若寫成:

fs = [(lambda n: i + n) for i in range(10)]

但是,奇怪的是,

>>> fs[3](4) //n=4時,數(shù)組元素fs[3]的值,注意不是fs(4)[3]
13
>>> fs[4](4)
13
>>> fs[5](4)
13

沒有達到預期的原因是lambda中的i使用的是匿名函數(shù)外的全局變量。修改一下:

fs = [(lambda n, i=i : i + n) for i in range(10)]
>>> fs[3](4) //n=4時,數(shù)組元素fs[3]的值,注意不是fs(4)[3]
7
>>> fs[4](4)
8
>>> fs[5](4)
9



    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多