日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python Lambda 表达式

發布時間:2024/7/23 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python Lambda 表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


來源:http://www.cnblogs.com/jydeng/p/4145188.html

一、lambda函數

1、lambda函數基礎:

lambda函數也叫匿名函數,即,函數沒有具體的名稱,而用def創建的方法是有名稱的。如下:

"""命名的foo函數""" def foo():return 'beginman' #Python中單行參數可以和標題寫在一行 """lambda關鍵字創建匿名函數,該表達式同以上函數""" lambda:'beginman' 上面的只是簡單的用lambda創建一個函數對象,并沒有保存它也沒有調用它,時刻會被回收了。這里我們保存并調用:
bar = lambda:'beginman' print bar() #beginman 從上面幾個例子中,可易理解Python lambda語法:
lambda [arg1[,arg2,arg3....argN]]:expression lambda語句中,冒號前是參數,可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是一個函數對象。
print lambda:'beginman' #<function <lambda> at 0x00B00A30>

2、無參數

如果沒有參數,則lambda冒號前面就沒有,如以上例子。

3、有參數

def add(x,y):return x+y add2 = lambda x,y:x+y print add2(1,2) #3def sum(x,y=10):return x+y sum2 = lambda x,y=10:x+y print sum2(1) #11 print sum2(1,100) #101

二、lambda與def

上面的例子中,可知lambda函數只是創建簡單的函數對象,是一個函數的單行版本,但是這種語句由于性能的原因,調用的時候繞過函數的棧分配。python lambda還有哪些和def不一樣呢?

def與lambda的區別 :?它們的主要不同點是python def 是語句而python lambda是表達式 ,理解這點對你了解它們很重要。

使用lambda函數還有一些注意事項:? lambda 函數可以接收任意多個參數 (包括可選參數) 并且返回單個表達式的值。? lambda 函數不能包含命令,包含的表達式不能超過一個

1 、python lambda會創建一個函數對象,但不會把這個函數對象賦給一個標識符,而def則會把函數對象賦值給一個變量。

>>> def foo():return 'foo()' >>> foo <function foo at 0x011A34F0>

2、python lambda它只是一個表達式,而def則是一個語句。lambda表達式運行起來像一個函數,當被調用時創建一個框架對象。

三、lambda函數的用途

個人認為有以下:

1、對于單行函數,使用lambda可以省去定義函數的過程,讓代碼更加精簡。

2、在非多次調用的函數的情況下,lambda表達式即用既得,提高性能

注意:如果for..in..if能做的,最好不要選擇lambda

四、參考

http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html

http://www.cnblogs.com/wanpython/archive/2010/11/01/1865919.html



lambda表達式是起到一個函數速寫的作用。允許在代碼內嵌入一個函數的定義。
list(filter(lambda x:True if x % 3 == 0 else False, range(100))) 如上所示,使用lambda表達式定義了一個匿名函數,用于篩選100以內的3的倍數,并生成一個列表。
def make_repeat(n):return lambda s : s * n 當然lambda也可以嵌套在一個函數內使用,如上,函數中嵌套了一個lambda表達式。
double = make_repeat(2) double <function make_repeat.<locals>.<lambda> at 0x0000000003A01D90> 然后,要使用的時候可以用一個變量來接收,顯示double變量,double變量是一個函數,并且需要一個參數,參見lambda表達式,需要一個s參數。
print(double(8)) 16

最后,調用double變量,并且傳入參數 8 ,得到返回值16。因為前面傳入的n的值為 2 ,故 2 * 8 得到16。

內置BIF介紹:

filter():簡單的理解為過濾器,需要兩個參數,function,和一個序列(字符串、列表、元組都是序列),過濾器會依次將序列的值傳入function中,

    如果返回True的話,將其重新生成一個列表返回。

list(filter(lambda x:True if x % 3 == 0 else False, range(100))) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

values = ['1', '2', '-3', '-', '4', 'N/A', '5'] def is_int(val):try:x = int(val)return Trueexcept ValueError:return False ivals = list(filter(is_int, values)) print(ivals)filter() 函數創建了一個迭代器,因此如果你想得到一個列表的話,就得像示例那樣使.?用 list() 去轉換。

zip():字面意思理解,就是zip打包,可以將多個序列進行打包,它會將序列拆分,然后把第一個序列和第二個序列的元素依次組成元組,2個一組組合成列表。

    不過要注意的是,這是以最短序列來組合的,就是說如果一個序列比較長,一個比較短的話,組合只會進行到斷序列的最后一個元素,多余的部分會被拋棄。

>>> str1 = "abcde" >>> str2 = "abcdefg" >>> list(zip(str1, str2)) [('a', 'a'), ('b', 'b'), ('c', 'c'), ('d', 'd'), ('e', 'e')]map():映射,用法和filter()類似,也是將序列放入函數進行運算,但是,不論運算結果為什么,map()都將忠實反饋,這是map()和filter()的主要區別。請注意,filter()和map()中的function都必要有一個返回值。
>>> list(map(lambda x:True if x % 3 == 0 else False, range(100))) [True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True]我比較認同電影《教父》里的人生觀: 第一步要努力實現自我價值,第二步要全力照顧好家人,第三步要盡可能幫助善良的人,第四步為族群發聲,第五步為國家爭榮譽。 事實上作為男人,前兩步成功,人生已算得上圓滿,做到第三步堪稱偉大,而隨意顛倒次序的那些人,一般不值得信任。


f = lambda x,y,z : x+y+z print f(1,2,3) g = lambda x,y=2,z=3 : x+y+z print g(1,z=4,y=5) #lambda表達式常用來編寫跳轉表(jump table),就是行為的列表或字典。例如: L = [(lambda x: x**2), (lambda x: x**3), (lambda x: x**4)] print L[0](2),L[1](2),L[2](2) D = {'f1':(lambda: 2+3), 'f2':(lambda: 2*3), 'f3':(lambda: 2**3)} print D['f1'](),D['f2'](),D['f3']() #3,lambda表達式可以嵌套使用,但是從可讀性的角度來說,應盡量避免使用嵌套的lambda表達式。 #4,map函數可以在序列中映射函數進行操作。例如: def inc(x): return x+10 L = [1,2,3,4] print map(inc,L) print map((lambda x: x+10),L) #5,列表解析可以實現map函數同樣的功能,而且往往比map要快。例如: print [x**2 for x in range(10)] print map((lambda x: x**2), range(10)) #6,列表解析比map更強大。例如: print [x+y for x in range(5) if x%2 == 0 for y in range(10) if y%2 ==1] #7,生成器函數就像一般的函數,但它們被用作實現迭代協議,因此生成器函數只能在迭代語境中出現。例如: def gensquares(N): for i in range(N): yield i**2 for i in gensquares(5): print i, #8,所有的迭代內容(包括for循環、map調用、列表解析等等)將會自動調用iter函數,來看看是不是支持了迭代協議。 #9,生成器表達式就像列表解析一樣,但它們是擴在圓括號()中而不是方括號[]中。例如: for num in (x**2 for x in range(5)): print num, #10,列表解析比for循環具有更好的性能。盡管如此,在編寫Python代碼時,性能不應該是最優先考慮的。 #11,沒有return語句時,函數將返回None對象。 #12,函數設計的概念:#耦合性:只有在真正必要的情況下才使用全局變量 #耦合性:不要改變可變類型的參數,除非調用者希望這樣做 #耦合性:避免直接改變另一個文件模塊中的變量 #聚合性:每一個函數都應有一個單一的、統一的目標 #13,最后給個默認參數和可變參數的例子:def saver(x=[]): x.append(1) print x saver([2]) saver() saver() saver()








總結

以上是生活随笔為你收集整理的python Lambda 表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。