python匿名函數

匿名函數就是沒有名字的函數,它定義的關鍵字是lambda,以後是一系列的參數,而後用冒號隔開,最後則是由這些參數組成的表達式。數組

lambda x:x**2#定義
(lambda x:x**2)(3)#調用

結果:
9

foo = lambda x,y:(x+y)**2#不建議這樣用,這樣建議使用普通函數
foo(1,2)

結果爲:
9

def foo(x,y):
    return (x+y)**2
foo(1,2)

結果:
9

 

匿名函數定義的時候,參數不須要小括號,之間逗號之間隔開就行了,後面的冒號用來分割開參數和表達式,同時,它不須要return,表達式的值就是匿名函數的返回值。模塊化

lambda表達式只能寫在一行上面,被稱爲單行函數,在高階函數傳參時,用匿名函數, 每每能簡化代碼。lambda也能夠用在列表內部。函數

[(lambda x:x*x)(x)for x in range(10)]

結果爲:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


a  = [(1,20),(3,0),(9,10),(2,-1)]
a.sort(key = lambda x:x[1])#按列表元祖的第二個元素排序
print(a)

結果爲:
[(2, -1), (3, 0), (9, 10), (1, 20)]

使用lambda表達式能夠模塊化代碼,同時能夠減小代碼的重複性。好比要對一個列表的數字都平方。這個時候就能夠使用它。spa

a = map(lambda x: x**2, [1, 2, 3, 4, 5])
print(list(a))

結果爲:
[1, 4, 9, 16, 25]

def spq(x):
    return x*x
a = map(spq,[1,2,3,4,5])
print(list(a))

結果爲:
[1, 4, 9, 16, 25]
print((lambda :0)())

結果爲:
0

print((lambda x,y=3:x+y)(5))

結果爲:
8

print((lambda x,y=3:x+y)(4,5))

結果爲:
9

print((lambda x,*,y=30:x+y)(5))

結果爲:
35

print((lambda x, *, y=30: x + y)(5, y=10))

結果爲:
15

print((lambda *args: (x for x in args))(*range(5)))

結果爲:
<generator object <lambda>.<locals>.<genexpr> at 0x03FE56B0>

print((lambda *args: [x+1 for x in args])(*range(5)))

結果爲:
[1, 2, 3, 4, 5]

 print((lambda *args: {x+2 for x in args})(*range(5)))

結果爲:
{2, 3, 4, 5, 6}

[x for x in (lambda *args: map(lambda x: x+1, args))(*range(5))]

結果爲:
[1, 2, 3, 4, 5]

[x for x in (lambda *args: map(lambda x: (x+1,args), args))(*range(5))]

結果爲:
[(1, (0, 1, 2, 3, 4)),
 (2, (0, 1, 2, 3, 4)),
 (3, (0, 1, 2, 3, 4)),
 (4, (0, 1, 2, 3, 4)),
 (5, (0, 1, 2, 3, 4))]
相關文章
相關標籤/搜索