標籤: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)])
3
python 六劍客(匿名函數和內建函數)