python 六劍客(匿名函數和內建函數)

來源:互聯網
上載者:User

標籤:keyword   add   def   表達   obj   推導列表   value   作用   多個   

一. 匿名函數lambda

 1.lambda只是一個運算式,函數體比def簡單很多。

 2.lambda的主體是一個運算式,而不是一個代碼塊。僅僅能在lambda運算式中封裝有限的邏輯進去

>>> def add(a,b):
...     return a+b
...
>>> add(1,4)
5
>>>
>>> lambda x:x+2
<function <lambda> at 0x00000273C937B8C8>  #函數
>>>
>>> a=lambda x,y:x+y
>>> a(2,6)
8

 

>>> f = [lambda x:x*i for i in range(4)]
>>> f[1](1)
3
>>> f1 = [lambda i=i: i*i for i in range(4)]
>>> f1[3]()
9

 

二 . filter()函數

filter()函數是 Python 內建的有用高階函數,filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,

返回 True或 False,filter()根據判斷結果自動過濾掉不合格元素,返回由符合條件元素組成的新list。

例如,在一個list中,刪掉偶數,只保留奇數,可以這麼寫:

def is_odd(n):    return n % 2 == 1filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
結果: [1, 5, 9, 15]

學習了lambda函數後,可以一行搞定
>>> list(filter(lambda x:x%2, [1, 2, 4, 5, 6, 9, 10, 15]))
[1, 5, 9, 15]
注意:python3 起,filter 函數返回的對象從列表改為 filter object(迭代器),
想要使用的話加上list(),將迭代器轉換成列表,例如:利用filter(),可以完成很多有用的功能,刪除 None 或者Null 字元串:

>>> def not_empty(s):
...     return s and s.strip()
...
>>> filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘  ‘])
<filter object at 0x0000020833998AC8>
>>>
>>> list(filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘  ‘]))
[‘A‘, ‘B‘, ‘C‘]

Python strip() 方法用於移除字串頭尾指定的字元(預設為空白格或分行符號)或字元序列。

注意:該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。

 

三. map() 函數

map() 會根據提供的函數對指定序列做映射。
第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數傳回值的新列表。

map(function, iterable, …)

    • function – 函數,有兩個參數
    • iterable – 一個或多個序列
    • 將結果作為list返回
>>> def abc(a, b, c):
...     return a*10000 + b*100 + c
...
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(abc,list1,list2,list3)
<map object at 0x0000023E269A8BE0>
>>> list(map(abc,list1,list2,list3))
[114477, 225588, 336699]

list(map(lambda x: x**2, range(5)))
[0, 1, 4, 9, 16]

四.reduce()函數
reduce()函數接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,
reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反覆調用函數f,並返回最終結果值。
def add (x, y):      return x + y >>> reduce(add, [1, 3, 5, 7, 9])
25

調用 reduce(f, [1, 3, 5, 7, 9])時,reduce函數將做如下計算:

先計算頭兩個元素:f( 1 , 3 ),結果為 4 再把結果和第 3 個元素計算:f( 4 , 5 ),結果為 9 再把結果和第 4 個元素計算:f( 9 , 7 ),結果為 16 再把結果和第 5 個元素計算:f( 16 , 9 ),結果為 25 由於沒有更多的元素了,計算結束,返回結果 25   五. 切片 a=[1,2,3,4,5,6,7,8,9]
>>>
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
>>> a[::4]    #步長為四
[1, 5, 9]  六.推導列表[運算式 for 變數 in 列表]    或者  [運算式 for 變數 in 列表 if 條件] 例如,假設我們要建立一個平方數組成的列表,比如:>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>我們也可以通過下面的方式獲得相同的列表:>>> squares = [x**2 for x in range(10)]
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 下面推導列表是求字典中key為整型的數之和 >>> [key  for key in {1:‘a‘,2:"b","a":3} if isinstance(key,int)]
[1, 2]
>>> sum([key  for key in {1:‘a‘,2:"b","a":3} if isinstance(key,int)])
 


 

python 六劍客(匿名函數和內建函數)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.