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,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
 
 


 

posted on 2018-09-04 22:58  淡淡的风景  阅读(198)  评论(0编辑  收藏  举报