欢迎光临
我们一直在努力

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

参与:魔王、Jamin

本文对 中的函数式编程技术进行了简单的入门介绍。

这儿, 越来越广泛的人群运用函数式编程()。所以, 诸多传统的命令性语言(像 Java 和)开启对函数式编程技术的支持。本文针对 里头的函数式编程技术给予了简易的入门阐释。

对于那些对函数式编程有着基本认知的读者而言, 本文是适宜的。要是你对函数式编程并非熟悉, 能够先去阅读这篇文章:@/–101-。

Python函数式编程入门介绍_python的函数_头等函数概念解析

这文本的笔者源自新加坡国立大学计算机学院, 同时身为「USP」博学计划的学生 Shah, 其主要精力着重聚焦于编程以及数据方面的研究。

头等函数

于其中, 函数身为「头等公民」(first – class), 这意味着, 函数跟其他数据类型(像 int)处在平等的地位。

因而, 我们能够把函数赋予变量, 还能够把它当作参数传递进其他函数, 把它们存于其他数据结构(像dicts)里, 并且把它们作为其他函数的返回结果。

把函数作为对象

鉴于其他的数据类型(比方说 、list以及int)均为对象, 所以函数亦是 里的对象。我们瞧瞧示例函数foo, 它会把自身的名称打印出来:

def foo():

print("foo")

因函数属于对象, 所以我们能够把函数foo赋予任意变量, 接着调用那个变量。举例来说, 我们能够把函数赋予变量bar:

bar = foo

bar()

#will print "foo" to the

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

把对象作为函数

当作为可调用对象之时(), 它们跟函数并无二致, 象 ()。此乃借由 方法予以达成的。

示例如下:

class :

def (self, ):

self. =

def (self, name):

self. + " " + name

每当开展配置行为, 针对于类的对象进行操作时, 我们一贯会去创建一个全新的对象, 此对象也就是在打招呼时能够用来呼喊的崭新名字, 情况犹如以下所载:

= ("good ") # the

("john") # the

# "good john" to the

能够调用对象的缘由在于, 在类定义里运用了方法。要查验对象是否具备可调用性, 使用的是内置函数:

() #true

(145) #false. int is not .

数据结构内的函数

函数跟其他对象没差别, 能够存于数据结构内部, 象是举例来说, 我们能够去创建int到func的字典, 在int是待执行步骤的简写情形下, 这便能发挥作用。

# store in

= {

0 : foo,

1 : bar

x等于input, 从用户那里获取值回来产生结果。

() #call the func by

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

把函数作为参数和返回值

有的函数能够作为别的函数的参数, 有的函数能够作为别的函数的返回值。那些接受函数当作输入的函数, 或者返回函数的函数, 被称作高阶函数, 它属于函数式编程里很重要的一部分。

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

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

示例来瞧一瞧。假定咱们想要针对一个项目列表, 也就是 list of items, 但凡是列表中的项目, 都要进行迭代操作, 随着迭代的进行, 还要把列表里项目的顺序依次打印出来。而这个时候, 咱们能够很轻易地构建出一个函数:

def ():

for item in :

print(item)

看上去是不是特别酷, 然而这仅仅只是一级抽象罢了。要是我们期望在针对列表开展迭代之际进行除打印之外的别的操作, 那该如何去做?

这便是高阶函数所具备的意义所在, 我们能够去创建函数, 那个待进行迭代操作的列表以及要针对每一个项予以应用的函数, 均为该函数的输入。

def (, ):

for item in :

(item)

这看起来微不足道,但其实非常强大。

我们已然将抽象的层级提升了一级, 致使代码拥有了更为强大的可重用性能。当下, 我们不但能够在打印列表之际调用此函数, 而且还能够针对涉及序列迭代的列表开展任意一类操作。

函数居然是能够被返回的, 以至于会让事情朝着更易于处理的方向转变。如同我们于dict里存放函数那般, 我们还能够把函数用作控制语句, 进而用以判定适宜的函数。举例而言:

def add(x, y):

x + y

def sub(x, y):

x – y

def mult(x, y):

x * y

def ():

if == 1:

add

elif == 2:

sub

else:

mult

= (2) #my calc is a

(5, 4) # 5 – 4 = 1

= (9) #my calc is now a

(5, 4) # 5 x 4 = 20.

嵌套函数

函数可以处于其他函数的内部, 这种情况就是所谓的「内部函数」。建立支持主函数的小型可重用函数, 也就是辅助函数时, 内部函数有着极大的用处, 辅助函数是作为子模块来发挥作用的。

当问题要求特定函数的定义(参数的类型或者顺序)之时, 我们能够运用辅助函数。这样做, 也就是不去遵循传统的做法, 进而让解决问题这件事情变得愈发简单, 示例可查看: ~cs61a/sp12//lect4-2×3.pdf。

假想一下, 你打算去定义这么一个只带有一个参数 n 的斐波那契函数 fib(n), 于此函数而言, 我们是一定得返回那第 n 个斐波那契数呀。

要定义此类函数, 有一种可行的方式, 那就是, 借用辅助函数来追踪斐波那契数列的前两个数, 这是因为, 斐波那契数乃是前两个数相加所得的和哟。

def fib(n):

def (fk1, fk, k):

if n == k:

fk

else:

(fk, fk1+fk, k+1)

if n

赞(0)
未经允许不得转载:171主机测评 » Python 代码不可不知的函数式编程技术
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址