python之lambda函數


  lambda函數又稱為匿名函數,匿名函數就是沒有函數名的函數。

>>> lambda x,y:x+y
<function <lambda> at 0x7f0f0dd85578>

  x,y是函數的兩個變量,位於冒號的左邊,冒號右邊的表達式是函數的返回值。

>>> add =lambda x,y:x+y
>>> add
<function <lambda> at 0x7f0f0dd855f0>
>>> add(1,2)
3

  等同於函數

def add(x,y):
    return x+y
add(1,2)

  lambda的使用場景

1.函數式編程
#例如:一個整數列表,要求按照列表中元素的絕對值大小升序排列
list1 = [3,5,-4,-1,0,-2,-6]
print(sorted(list1,key=abs))
print(sorted(list1,key=lambda x:abs(x)))

2.python中最常見的filter篩選、map小刷子、reduce合並,都可以用lambda表達式來生成。對於序列來講,有三個函數式編程工具:filter()、map()、reduce()
map(function,sequence):把sequence中的值當參數逐個傳給function,返回一個包含函數執行結果的list。如果function有兩個參數,即map(function,sequence1,sequence2)。
#求1~20的平方
print(list(map(lambda x:x**2,range(1,21))))
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]

filter(function,sequence):對sequence中的item依次執行function(item),將執行結果為True的item組成一個List/String/Tuple(取決於sequence的類型)返回。
#求1~20之間的偶數
print(list(filter(lambda x:x%2 == 0,range(1,21))))
#[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

reduce(function,sequence):function接收的參數個數只能為2,先把sequence中第一個值和第二個值當參數傳給function,再把function的返回值和第三個值當參數傳給function,然后只返回一個結果。
#求1~100之和
from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101)))
#5050

#求1~100之和,再加上10000
from functools import reduce
print(reduce(lambda x,y:x+y,range(101),10000))
#15050

3.閉包
一個定義在函數內部的函數,內部函數使用了外部函數的臨時變量,並且外部函數的返回值是內部函數的引用。

def outer(a):
    b=10
        def inner(): # 內部函數
            print(a+b)
        return inner # 外函數的返回值是內函數的引用
outer(5)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM