python 六剑客(匿名函数和内建函数)
一. 匿名函数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]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
>>> a[::4] #步长为四
[1, 5, 9]
>>> for x in range(10):
... squares.append(x**2)
...
>>> print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 2]
>>> sum([key for key in {1:'a',2:"b","a":3} if isinstance(key,int)])
3