前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之函数编程(1)

Python之函数编程(1)

作者头像
AsiaYe
发布2019-11-06 15:21:00
3700
发布2019-11-06 15:21:00
举报
文章被收录于专栏:DBA随笔DBA随笔
ython之函数编程(1)

01

函数和变量可以互指

第一次接触到这个知识点的时候,我还不是特别适应,内置的函数怎么可以用一个变量来代替?但是python确实是这么做的,这也不妨碍它的顺利执行。举个例子说明一下,我们以Python内置的求绝对值的函数为例:

这里的f相当于内置的abs函数。这种的已经很疯狂了,再来看一种更疯狂的操作,直接用一个函数名作为一个普通变量,然后毁坏函数本身:

当我们给这个abs赋值一个普通的变量的时候,这个内置函数本身已经被损坏了,不能再去求一个数字的绝对值了,除非重新打开python。

传入函数

这种的方法也很bug,可以直接讲一个函数作为参数传到另外一个函数当中,这种函数称之为高阶函数,举个例子来说明:

我们定义一个add函数,它接收三个参数,一个x,一个y,一个f,当我们调用add的时候,它的调用过程是这样的:

x = -5

y = 6

f = abs

f(x) + f(y) ==> abs(-5) + abs(6) ==> 11

return 11

02

map/reduce

Python中内建了map和reduce函数,我们一个一个分析,先说说map,map函数接收两个参数,一个是函数,另外一个是iterable,map将传入的函数一次作用到可迭代对象的每个元素,并把结果作为迭代器返回。

举个例子说明一下:

可以看出来,list函数在map中把取相反数的函数f作用到每一个list的元素上,生成新的对象,然后输出。

再说说reduce,reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)

reduce在某些特定场景下具有重要的作用,例如我们想把一个[1,3,5,7,9]的list变成一个整数13579,reduce的处理方法如下:

再来看一个利用map和reduce实现str2int的方法:

第二个函数char2num可以利用一个数据字典进行映射,将字符映射成一个一个的数字,第一个函数f直接将一个一个的数字进行拼接。

03

filter和sort

filter()

filter函数用于过滤序列,和map类似,filter也接收一个函数和一个序列,filter中的函数是一个条件,它将满足条件的元素保留,不满足的丢弃,来看下面这个例子:

它的作用是过滤掉序列中的偶数。

sort()

sort函数主要是用来排序的,其核心是比较数字大小,如果是两个数据字典比较大小的话,必须自定义比较的规则。

先来看看他的排序功能:

再来看看它是如何制定比较规则的:

我们可以看到,在list的后面给出了比较规则,规则就是绝对值进行比较,按照绝对值大小的顺序将list中的数字排列出来。

再看一个字符串比较的例子:

我们可以看到,是根绝ASCII码的顺序比较的,C的ASCII码是67,Z是90,小的字数字放在前面。对于这个问题,我们将难度升级,设想这样一种情况,我们不区分大小写进行排序。要实现这种方式的排序,我们必须先把大写的字母转化成小写,这就需要我们利用一个内置的lower函数来进行转换,如下:

我们可以看到,这样的结果就是我们想要的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档