python笔记--匿名函数和函数式编程

一、匿名函数(lambda):

有些地方需要用到一些简单的函数,而且用到的次数不太多,这个时候可以把函数改写成匿名函数,不必专门去定义一个新的函数。python中,lambda是一个表达式,并不是一个语句,而且lambda的主体是只有一行的简单表达式,并不能扩展成一个多行的代码块。

python的一些匿名函数用法例子:

# 匿名函数的格式:
lambda argument1, argument2, ... argumentN : expression

# 示例一:
square = lambda x: x**2

square = square(3)


# 示例二:
[(lambda x: x*x)(x) for x in range(10)]


# 示例三:
l = [(1,20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1])

# 示例四:
squared = map(lambda x: x**2, [1,2,3,4,5])
# map(function, iterable)  对iterable的每一个元素进行function运算。

# 示例五:
d = {'mike': 10, 'lucy': 2, 'ben': 30}
dict(sorted(d.items(), key = lambda x: x[1], reverse=True))

 

二、函数式编程

python提供的一些函数式编程特性,主要是通过map(),filter()和reduce()这几个函数,结合匿名函数lambda一起使用。

通常,使用这些函数的速度会更快,因为它们直接由C语言编写,运行时不需要通过python解释器间接调用。

下面是一些示例用法:

# map(function, iterable)的用法: 对每个iterable的元素运用function函数,组成一个新的集合 
l = [1,2,3,4,5]
new_list = map(lambda x: x * 2, l)

# 测试map的速度
python3 -mtimeit -s'xs=range(1000000)' 'map(lambda x: x*2, xs)'

python3 -mtimeit -s'xs=range(1000000)' '[x * 2 for x in xs]'

python3 -mtimeit -s'xs=range(1000000)' 'l = []' 'for i in xs: l.append(i*2)'


# filter(function, iterable)的用法: 对每个iterable的元素运用function函数,将返回True的元素组合成一个新的集合
l = [1,2,3,4,5]
new_list = filter(lambda x: x % 2 == 0, l)


# reduce(function, iterable)的用法: 对一个集合进行一些累积操作,function有两个参数,表示对iterable里的每个元素以及上一次调用后的结果调用function进行运算,最后返回一个单独的数值
l = [1,2,3,4,5]
product = reduce(lambda x, y: x * y, l)
# 表示运算:  product = 1 * 2 * 3 * 4 * 5

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值