当前位置:首页 > 娱乐

【fkzww】python函数编程,看这篇文章就够了。

机器的心,python编程时间

本文简要介绍了Python的函数编程技术。

一等函数

在python中,函数是“头号公民”。也就是说,函数与其他数据类型(例如int)处于同等位置。

因此,您可以将函数分配给变量,或将函数作为参数传递给其他函数,将其存储在其他数据结构(如dicts)中,并用作其他函数的返回值。

以函数为对象

其他数据类型(如String、list和int)是对象,因此函数也是Python的对象。让我们看一下打印自己名字的示例函数foo。

Def foo:

由于Print('foo ')函数是对象,因此可以将函数foo分配给变量,然后调用该变量。例如,可以将函数分配给变量bar。

Bar=foo

酒吧

#will print 'foo' to the console语句bar=foo函数foo引用的对象分配给变量bar。

把对象当作函数

可以调用对象时(callable),与object等函数相同。这是通过__call__方法完成的。

例如:

Class Greeter:

Def _ _ init _ _ (self,greeting) :

=greeting

Def __call__(self,name):

Return'' name会建立新物件,这是每当您建构Greeter类别的物件时,在问候时可以喊的新物件。这是:

morning=greeter(' good morning ')# creates the callable object

morning(' John ')# calling the object

# prints ' good morning John ' to the console类定义中使用了__call__方法,因此可以调用morning对象。要确定对象是否可调用,请使用内置函数callable。

Callable(morning) #true

callable(145)# false . int is not callable。数据结构内的函数

函数可以像其他对象一样存储在数据结构内。例如,可以为“int to func”创建词典。这在int是要执行的步骤的缩写时很有用。

# store in dictionary

映射={

0 : foo,

1 : bar

}

x=input # get integer value from user

与mapping[x]# call the func returned by dictionary access一样,函数也可以存储在许多不同的数据结构中。

使用函数作为参数和返回值

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

高级函数具有强大的功能。如《Eloquent JavaScript》所述:

“使用高级函数,不仅可以对抽象的数字进行抽象,还可以对行为进行抽象。”说

让我举一个例子。假设您想重复“项目列表”(list of items)并打印顺序。可以轻松地编写Iterate函数。

Def iterate(list_of_items):

For item in list_of_items:

Print(item)看起来很帅,但这只是一级抽象。重复列表时,如何执行打印以外的任务?

这就是高阶函数存在的意义。可以创建Iterate_custom函数。要执行的迭代列表和要应用于每个项目的函数是iterate_custom函数的输入。

De

f iterate_custom(list_of_items, custom_func):
for item in list_of_items:
custom_func(item)

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

我们已经把抽象的级别提高了一层,使代码具备更强的可重用性。现在,我们不仅可以在打印列表时调用该函数,还可以对涉及序列迭代的列表执行任意操作。

函数还能被返回,从而使事情变得更加简单。就像我们在 dict 中存储函数一样,我们还可以将函数作为控制语句,来决定适合的函数。例如:

def add(x, y):
return x + y
def sub(x, y):
return x - y
def mult(x, y):
return x * y
def calculator(opcode):
if opcode == 1:
return add
elif opcode == 2:
return sub
else:
return mult
my_calc = calculator(2) #my calc is a subtractor
my_calc(5, 4) #returns 5 - 4 = 1
my_calc = calculator(9) #my calc is now a multiplier
my_calc(5, 4) #returns 5 x 4 = 20.

嵌套函数

函数还可以在其他函数内部,这就是「内部函数」。内部函数在创建辅助函数时非常有用,辅助函数即作为子模块来支持主函数的小型可重用函数。

在问题需要特定函数定义(参数类型或顺序)时,我们可以使用辅助函数。这种不遵循传统做法的操作使得解决问题变得更加简单,示例参见:。

假设你想定义一个斐波那契函数 fib(n),该函数只有一个参数 n,我们必须返回第 n 个斐波那契数。

定义此类函数的一种可行方式是:使用辅助函数来追踪斐波那契数列的前两个项(因为斐波那契数是前两个数之和)。

def fib(n):
def fib_helper(fk1, fk, k):
if n == k:
return fk
else:
return fib_helper(fk, fk1+fk, k+1)
if n <= 1:
return n
else:
return fib_helper(0, 1, 1)

将该计算从函数主体移到函数参数,这具备非常强大的力量。因为它减少了递归方法中可能出现的冗余计算。

单表达式函数(lambda 表达式)

如果我们想在未给函数命名之前写一个函数要怎么做?如果我们想写一个简短的单行函数(如上述示例中的函数 foo 或 mult)要怎么做?

我们可以在 Python 中使用 lambda 关键字来定义此类函数。示例如下:

mult = lambda x, y: x * y
mult(1, 2) #returns 2

该 mult 函数的行为与使用传统 def 关键字定义函数的行为相同。

注意:lambda 函数必须为单行,且不能包含程序员写的返回语句。

事实上,它们通常具备隐式的返回语句(在上面的示例中,函数想表达 return x * y,不过我们省略了 lambda 函数中的显式返回语句)。

lambda 函数更加强大和精准,因为我们还可以构建匿名函数(即没有名称的函数):

(lambda x, y: x * y)(9, 10) #returns 90

当我们只需要一次性使用某函数时,这种方法非常方便。例如,当我们想填充字典时:

import collections
pre_fill = collec(lambda: (0, 0))
#all dictionary keys and values are set to 0

接下来我们来看 Map、Filter 和 Reduce,以更多地了解 lambda。

Map、Filter 和 Reduce

Map

map 函数基于指定过程(函数)将输入集转换为另一个集合。这类似于上文提到的 iterate_custom 函数。例如:

def multiply_by_four(x):
return x * 4
scores = [3, 6, 8, 3, 5, 7]
modified_scores = list(map(multiply_by_four, scores))
#modified scores is now [12, 24, 32, 12, 20, 28]

在 Python 3 中,map 函数返回的 map 对象可被类型转换为 list,以方便使用。现在,我们无需显式地定义 multiply_by_four 函数,而是定义 lambda 表达式:

modified_scores = list(map(lambda x: 4 * x, scores))

当我们想对集合内的所有值执行某项操作时,map 函数很有用。

Filter

就像名称所显示的那样,filter 函数可以帮助筛除不想要的项。例如,我们想要去除 scores 中的奇数,那么我们可以使用 filter:

even_scores = list(filter(lambda x: True if (x % 2 == 0) else False, scores))
#even_scores = [6, 8]

由于提供给 filter 的函数是逐个决定是否接受每一个项的,因此该函数必须返回 bool 值,且该函数必须是一元函数(即只使用一个输入参数)。

Reduce

reduce 函数用于「总结」或「概述」数据集。例如,如果我们想要计算所有分数的总和,就可以使用 reduce:

sum_scores = reduce((lambda x, y: x + y), scores)
#sum_scores = 32

这要比写循环语句简单多了。注意:提供给 reduce 的函数需要两个参数:一个表示正在接受检查的项,另一个表示所用运算的累积结果。

  • Best Practices for Using Functional Programming in Python:

  • Functional Programming Tutorials and Notes:

原文链接:

1.《【fkzww】python函数编程,看这篇文章就够了。》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【fkzww】python函数编程,看这篇文章就够了。》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/2256436.html

上一篇

【katherinepierce】进入好莱坞冷宫的剩女长得太漂亮也有错吗?

下一篇

gogo brothers专题之《街舞》队友惨遭淘汰,张艺兴笑称“只是游戏”,网友:输不起?

【fkzww】春节礼物经济学

【fkzww】春节礼物经济学

fkzww相关介绍,编者指南:探亲、过年、收压岁钱是春节必须做的三件事,今年春节有点特殊。因为传染病,很多人原地选择春节。但是,在外地过年仍然阻挡不了人们过年的意识,在外地送礼物成为新年风俗。这篇文章的作者分析了这一现象...