大奖18dj18vip-大奖18dj18娱乐官网

【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!

大奖18dj18vip

大奖18dj18vip 门户 教程 电脑网络 查看内容

写 Python 代码不可不知的函数式编程技术

2020-1-21 16:51| 发布者: 虚拟主机评测| 查看: 77| 评论: 0

摘要: 近来,越来越多人使用函数式编程(functional programming)。因此,很多传统的命令式语言(如 Java 和 Python)开始支持函数式编程技术。本文对 Python 中的函数式编程技术进行了简单的入门介绍。本文适合对函数式 ...

近来,越来越多人使用函数式编程(functional programming)。因此,很多传统的命令式语言(如 Java 和 Python)开始支持函数式编程技术。本文对 Python 中的函数式编程技术进行了简单的入门介绍。

本文适合对函数式编程有基本了解的读者。如果你对函数式编程并不熟悉,可以先阅读这篇文章:http://medium.com/@yannickdot/functional-programming-101-6bc132674ec5。

本文作者是新加坡国立大学计算机学院和「USP」博学计划学生 Raivat Shah,专注于编程与数据研究。

头等函数

在 Python 中,函数是「头等公民」(first-class)。也就是说,函数与其他数据类型(如 int)处于平等地位。

因而,我们可以将函数赋值给变量,也可以将其作为参数传入其他函数,将它们存储在其他数据结构(如 dicts)中,并将它们作为其他函数的返回值。

把函数作为对象

由于其他数据类型(如 string、list 和 int)都是对象,那么函数也是 Python 中的对象。我们来看示例函数 foo,它将自己的名称打印出来:

  1. CIMAl; border: none; line-height: 21px; font-family: Arial; background: url("http://images.51cto.com/images/art1105/images/0.gif") -498px -70px repeat-y scroll transparent; color: inherit; padding: 0px 3px 0px 10px !important; margin: 0px !important; list-style-position: outside !important;">def foo(): 
  2.    print("foo"

由于函数是对象,因此我们可以将函数 foo 赋值给任意变量,然后调用该变量。例如,我们可以将函数赋值给变量 bar:

  1. bar = foo 
  2. bar() 
  3. #will print "foo" to the console 

语句 bar = foo 将函数 foo 引用的对象赋值给变量 bar。

把对象作为函数

当对象可调用时(callable),它们与函数一样,如 object()。这是通过 __call__ 方法实现的。

示例如下:

  1. class Greeter: 
  2.    def __init__(self, greeting): 
  3.       self.greeting = greeting 
  4.    def __call__(self, name): 
  5.       return self.greeting + " " + name 

每一次配置 Greeter 类的对象时,我们都会创建一个新的对象,即打招呼时可以喊的新名字。如下所示:

  1. morning = Greeter("good morning") #creates the callable object 
  2. morning("john") # calling the object 
  3. #prints "good morning john" to the console 

我们可以调用 morning 对象的原因在于,我们已经在类定义中使用了 __call__ 方法。为了检查对象是否可调用,我们使用内置函数 callable:

  1. callable(morning) #true 
  2. callable(145) #falseint is not callable.  

数据结构内的函数

函数和其他对象一样,可以存储在数据结构内部。例如,我们可以创建 int to func 的字典。当 int 是待执行步骤的简写时,这就会派上用场。

  1. # store in dictionary 
  2. mapping = { 
  3.    0 : foo, 
  4.    1 : bar 
  5. x = input() #get integer value from user 
  6. mapping[x]() #call the func returned by dictionary access 

类似地,函数也可以存储在多种其他数据结构中。

把函数作为参数和返回值

函数还可以作为其他函数的参数和返回值。接受函数作为输入或返回函数的函数叫做高阶函数,它是函数式编程的重要组成部分。

高阶函数具备强大的能力。就像《Eloquent JavaScript》中解释的那样:

「高阶函数允许我们对动作执行抽象,而不只是抽象数值。」


12下一页

鲜花

握手

雷人

路过

鸡蛋

相关阅读

资讯分类

推荐图文

文章排行

Powered by www.dastanona.com Copyright © 2013-2021 大奖18dj18vip社区 小黑屋|手机版|Archiver|地图|联系站长|腾讯云代金券|搜搜影视|seo优化服务|大奖18dj18vip
广告服务/项目合作/会员购买:QQ 侵权举报邮箱: fuwu-sosoba@qq.com  大奖18dj18vip建站时间:创建于2013年07月23日
免责声明:大奖18dj18vip所有的内容均来自互联网以及第三方作者自由发布,版权归原作者版权所有,大奖18dj18vip不承担任何的法律责任,若有侵权请来信告知,我们立即删除!
版权声明:大奖18dj18vip影视资源均收集自互联网,没有提供影片资源存储和下载,也未参与录制上传,若大奖18dj18vip收录的资源涉及您的版权或知识产权或其他利益,我们会立即删除

GMT+8, 2021-1-25 02:21 , Processed in 0.025738 second(s), 8 queries , MemCached On.

返回顶部