Python笔记(十一)_匿名函数与map()、filter()

时间:2023-03-08 17:20:41

匿名函数

无需显式定义函数名,和函数过程,使代码更精简的lambda表达式

函数没有命名,不用担心函数名的冲突

冒号前面代表函数的参数,后面表示计算过程

>>>func=lambda x : 2*x+1
>>>func(5)
11

map()

根据提供的函数对指定序列做出相应的映射

它接受两个参数,第一个是函数对象本身,第二个是序列

map将传入的函数依次作用到序列的每个元素,并把结果作为新的迭代器返回

由于结果是一个迭代器,可通过list()函数让它返回一个新的list

例1:将数字转换为字符串

>>>list(map(str,[1,2,3]))
['', '', '']

例2:计算平方

>>>def func(x):
  return x*x
>>>list(map(func,[1,2,3]))
[1, 4, 9]

还可以与lambda合用简化代码:

>>>list(map(lambda x : x*x,range(1,4)))
[1, 4, 9]
>>>list(map(lambda x,y : 2*x-y,[1,3,5],[2,4,6]))
[0, 2, 4]

filter()

和map()类似,但不会返回所有的映射值,会过滤掉不符合条件的值

它接受两个参数,第一个是判断函数,第二个是序列

例1:删除序列中的空字符

>>>def not_empty(s):
  return s and s.strip()
>>>list(filter(not_empty,['a','','B',None,' ']))
['a', 'B']

例2:求奇数

>>>def odd(x):
  return x%2
>>>list(filter(odd,[1,2,3,4,5,6,7,8,9]))
[1, 3, 5, 7, 9]

还可以与lambda合用简化代码:

>>>list(filter(lambda x : x%2,[1,2,3,4,5,6,7,8,9]))
[1, 3, 5, 7, 9]

1-20以内所有能被3整除的数:

>>>list(filter(lambda x: not(x%3),range(1,20)))
[3, 6, 9, 12, 15, 18]