1. 程式人生 > >python 六劍客(匿名函數和內建函數)

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

換行符 range 映射 append color 一行 als nta params

一. 匿名函數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 == 1

filter(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 或者空字符串:


>>> 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)])
3
 


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