美文网首页
(十一)函数<4>几个特殊函数

(十一)函数<4>几个特殊函数

作者: 费云帆 | 来源:发表于2019-01-04 13:35 被阅读0次

1.lambda()---匿名函数,可以把函数压缩在一行里搞定:

  • 平常的作法:
def add(x):
    x+=3
    return x

numbers=range(10)
new_numbers=[]
for i in numbers:
    new_numbers.append(add(i))
print(new_numbers)
>>>
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# 或者这么做
numbers=[i+3 for i in range(10)]
print(numbers)
>>>
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
  • 使用lambda():
lam=lambda x:x+3
#lam=lambda x:x+=3 这种语法是错的
numbers=range(10)
new_numbers=[]
for i in numbers:
    new_numbers.append(lam(i))
print(new_numbers)
>>>
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
  • 或者这样:
add=lambda x,y:x+y
print(add(3,4))
>>>7
# 看样子,还是赋值给变量看起来比较舒服
print((lambda x:x**2)(5))
>>>25
  • lambda()使代码看起来更简洁:
squares=[lambda x:x,lambda x:x**2,lambda x:x**3,lambda x:x**4]
for i in squares:
    print(i(5))
>>>
5
25
125
625

记住,lambda是一个单行的函数.之前也有这样的单行函数:

def function():pass

2.map(func,seq)---把seq序列的值依次取出来,塞进函数func里面,再返回func计算的结果:

def add(x):
    x+=3
    return x

numbers=[1,2,3,4,5,6,7]
#print(list(map(add,numbers)))
print(list(map(lambda x:x+3,numbers)))
>>>
[4, 5, 6, 7, 8, 9, 10]

在应用中,map的所能实现的,也可以用别的方式实现。比如:

>>> items = [1,2,3,4,5]
>>> squared = []
>>> for i in items:
... squared.append(i**2)
...
>>> squared
[1, 4, 9, 16, 25]
>>> def sqr(x): return x**2
...
>>> map(sqr,items)
[1, 4, 9, 16, 25]
>>> map(lambda x: x**2, items)
[1, 4, 9, 16, 25]
>>> [ x**2 for x in items ] # 推荐这个,一般情况下速度足够快,而且可读性强
[1, 4, 9, 16, 25]
  • 如果参数很多,则对那些参数并行执行function:
>>> lst1 = [1, 2, 3, 4, 5]
>>> lst2 = [6, 7, 8, 9, 0]
>>> map(lambda x, y: x + y, lst1, lst2) #将两个列表中的对应项加起来,并返回一个结果列表
[7, 9, 11, 13, 5]
  • 上面这个例子如果用for循环来写,还不是很难,如果扩展一下,下面的例子用for来改写,就要小心了:
>>> lst1 = [1, 2, 3, 4, 5]
>>> lst2 = [6, 7, 8, 9, 0]
>>> lst3 = [7, 8, 9, 2, 1]
>>> map(lambda x,y,z: x+y+z, lst1, lst2, lst3)
[14, 17, 20, 15, 6]

这才显示出map的简洁优雅。
总而言之,map()---优雅处理序列和函数的映射关系
zip()---用来处理序列和序列之间关系的
3.reduce()---横向逐个运算,map()是上下运算:

# reduce
>>> from functools import reduce
>>> reduce(lambda x,y:x+y,[1,2,3,4,5])
15
>>> list1=[1,2,3,4,5]
>>> list2=[5,4,3,2,1]
>>> list(map(lambda x,y:x+y,list1,list2))
[6, 6, 6, 6, 6]

4.filter()---过滤器:
filter(function or None, iterable) --> filter object
传入函数和序列,筛选出需要的数据(这里的函数当作过滤的规则)

>>> number=range(-5,5)
# 筛选大于0的数据
>>> list(filter(lambda x:x>0,number))
[1, 2, 3, 4]
# 筛选除了"i"的所有字母
>>> list(filter(lambda x:x!='i','qiwsir'))
['q', 'w', 's', 'r']

相关文章

  • (十一)函数<4>几个特殊函数

    1.lambda()---匿名函数,可以把函数压缩在一行里搞定: 平常的作法: 使用lambda(): 或者这样:...

  • Python几个特殊函数

    在Python中,有几个特别的函数,它们常常被看做是Python能够进行所谓“函数式编程”的见证。它们是:filt...

  • 函数 -- 特殊函数

    匿名函数 python 使用 lambda 来创建匿名函数。所谓匿名,即不再使用 def 语句这样标准的形式定义一...

  • Python 拓展之特殊函数(lambda 函数,map 函数,

    写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 “函数...

  • 装饰器,lambda函数,特殊函数(map,reduce,fil

    一特殊函数 1map 函数map()需要一个函数或者几个序列做参数(通常是一个), 对于序列的每个元素作为函数的参...

  • Python札记24_lambda、map

    在Python中有几个特殊的函数,它们能够进行函数式的编程。在函数式编程中,一个程序会被看做是一个无状态的函数计算...

  • OpenGL入门002固定管线

    一、代码部分 1、项目初始化 2、 回调函数 (改变尺寸) 3、点击空格时,调用的函数 4、特殊键位函数 (上下左...

  • Kotlin | 作用域函数

    什么是作用域函数(Scope Functions)? Kotlin 标准库包含了几个特殊的函数,其目的是在调用对象...

  • 构造函数(constructor)

    定义:类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。 作用:构造函数的任务是初始化...

  • 特殊函数

    __str__ Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给...

网友评论

      本文标题:(十一)函数<4>几个特殊函数

      本文链接:https://www.haomeiwen.com/subject/dmbhrqtx.html