匿名函數:lambda

匿名函數定義

Python,有兩種函數一種是def定義一種是lambda函數python

假如要求兩個數之和,用普通函數或匿名函數以下:
編程

運用普通函數:函數式編程

def func(x): 
  return x>3                                              
a=filter(func,[1,2,3,4,5]) print(a) #利用filter函數獲得的是一個迭代器 for i in a: print(i)
獲得結果:
<filter object at 0x0000000002704358> 4 5

匿名函數:
函數

# a=filter(lambda x:x>3,[1,2,3,4,5])
# print(a)
# for i in a:
#     print(i)
獲得結果:
<filter object at 0x0000000002704358> 4 5

上面的例子中:spa

x 爲lambda函數的一個參數
: 分割符
x>3 則是返回值,在
lambda函數中不能有return,其實:後面就是返回值
code

 

#def func(x):
#    return x 
#func()
等價於下面:
lambda x:x
>3

 

爲何要用匿名函數?

1. 程序一次行使用,因此不須要定義函數名,節省內存中變量定義空間

2. 若是想讓程序更加簡潔時。通常應用於函數式編程
blog

匿名函數的參數

不帶參數匿名函數
>>> >>> t = lambda : True #分號前無任何參數
>>> t()
True

帶參數匿名函數
>>> lambda x: x**3 #一個參數
>>> lambda x,y,z:x+y+z #多個參數 >>> lambda x,y=3: x*y #容許參數存在默認值

匿名參數的運用

能夠和內置函數 min、 max、 filter、 map 、sorted 配合使用
# def func(x):
# return x>10

# res = filter(func,[5,8,11,9,15]) # for i in res: # print(i)
等價於
# res = filter(lambda x:x>10,[5,8,11,9,15])
# for i in res:
# print(i)
 
 
11
15
 

 

#def func(x)
#  return x**2
#func()

等價於
# ret = map(lambda x:x**2,[-1,2,-3,4])

# for i in ret:
#  print(i)
1
4
9
16

 

dic={'k1':10,'k2':100,'k3':30}
def func(key):
    return dic[key]
print(max(dic,key=func))   #根據返回值判斷最大值,返回值最大的那個參數是結果
print(max(dic,key=lambda key:dic[key]))

k2
能夠和三元運算搭配使用
>>> (lambda x,y: x if x> y else y)(101,102)    #直接後面傳遞實參
102 

  判斷字符串是否以某個字母開頭

ip

>>> print (lambda x: x.startswith('B'))('Bob')
True

   嵌套使用內存

#lambda嵌套到普通函數中,lambda函數自己作爲return的值

------

>>> def k(n):
... return lambda x: x+n
...
>>> f=k(4)
>>> f(2)
6

 現有兩元組(('a'),('b')),(('c'),('d')),
 請使用python中匿名函數生成列表[{'a':'c'},{'b':'d'}]字符串

# ret = zip((('a'),('b')),(('c'),('d')))       利用zip()能夠獲得<zip object at 0x0000000001EB3948>   
# res = map(lambda i:{i[0]:i[1]},ret)
# print(list(res))
[{'a':'c'},{'b':'d'}]

相關文章
相關標籤/搜索