python什么是高阶函数_对于高阶函数的理解是什么?

如前所述,您可以使用列表理解进行的所有操作都可以分解为高阶函数,但是在Python中这样做的一个很大一部分问题是Python缺乏对您可以与filter、map和Haskell中的friends一起使用的那种无点编程的支持。这里有一个有点做作的例子,但我想你会明白的。在

让我们看一下这个Python代码:

[(x,y) for x,y in zip(xrange(20), xrange(20, 0, -1)) if x % 2 == 0 and y % 2 == 0]

它所做的就是把这个打印出来:

[(0, 20), (2, 18), (4, 16), (6, 14), (8, 12), (10, 10), (12, 8), (14, 6), (16, 4), (18, 2)]

下面是过滤器的等效版本:

filter(lambda ns : ns[0] % 2 == 0 and ns[1] % 2 == 0, zip(xrange(20), xrange(20, 0, -1)))

我希望你能同意我的观点,那是更丑陋的。在不定义单独的函数的情况下,要使它变得不那么难看,实在做不到什么。在

但是让我们看看Haskell中的等效版本:[(x,y) | (x,y)

好吧,和Python列表理解版一样好。过滤器的等效版本是什么?在

^{pr2}$

好的,我们必须进行导入,但是一旦您理解了它的作用,代码(imo)就会清晰得多,尽管有些人可能仍然喜欢f被指向,或者甚至是带有过滤器的lambda。在我看来,无点版本更简洁,概念更清晰。但我想说的主要一点是,在Python中,这并不是很清楚,因为在不引入单独的库的情况下无法部分应用函数,并且缺少组合运算符,所以在Python中,最好选择列表理解而不是map/filter,但是在Haskell中,这两种方法都可以视具体问题而定。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值