ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

Python 代码不可不知的函数式编程技术 参与魔王、Jamin本文对 中的函数式编程技术进行了简单的入门介绍。这儿, 越来越广泛的人群运用函数式编程。所以, 诸多传统的命令性语言像 Java 和开启对函数式编程技术的支持。本文针对 里头的函数式编程技术给予了简易的入门阐释。对于那些对函数式编程有着基本认知的读者而言, 本文是适宜的。要是你对函数式编程并非熟悉, 能够先去阅读这篇文章/--101-。这文本的笔者源自新加坡国立大学计算机学院, 同时身为「USP」博学计划的学生 Shah, 其主要精力着重聚焦于编程以及数据方面的研究。头等函数于其中, 函数身为「头等公民」first - class, 这意味着, 函数跟其他数据类型像 int处在平等的地位。因而, 我们能够把函数赋予变量, 还能够把它当作参数传递进其他函数, 把它们存于其他数据结构像dicts里, 并且把它们作为其他函数的返回结果。把函数作为对象鉴于其他的数据类型比方说 、list以及int均为对象, 所以函数亦是 里的对象。我们瞧瞧示例函数foo, 它会把自身的名称打印出来:def foo():print(foo)因函数属于对象, 所以我们能够把函数foo赋予任意变量, 接着调用那个变量。举例来说, 我们能够把函数赋予变量bar:bar foobar()#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 : barx等于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 ydef sub(x, y):x - ydef mult(x, y):x * ydef ():if 1:addelif 2:subelse: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-2x3.pdf。假想一下, 你打算去定义这么一个只带有一个参数 n 的斐波那契函数 fib(n), 于此函数而言, 我们是一定得返回那第 n 个斐波那契数呀。要定义此类函数, 有一种可行的方式, 那就是, 借用辅助函数来追踪斐波那契数列的前两个数, 这是因为, 斐波那契数乃是前两个数相加所得的和哟。def fib(n):def (fk1, fk, k):if n k:fkelse:(fk, fk1fk, k1)if n
返回列表