专栏首页DBA随笔Python之函数编程(1)

Python之函数编程(1)

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函数来进行转换,如下:

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

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 回调装饰器

    通过使用生成器和协程可以使得回调函数内联在某个函数中。 为了演示说明,假设你有如下所示的一个执行某种计算任务然后调用一个回调函数的函数(参考7.10小节):

    用户5760343
  • python 将列表写到二进制文件中

    from struct import Struct def write_records(records, format, f): ''' Write a ...

    用户5760343
  • Pandas中文官档 ~ 基础用法1

    head() 与 tail() 用于快速预览 Series 与 DataFrame,默认显示 5 条数据,也可以指定要显示的数量。

    小小詹同学
  • Python 官网宣布,正式发布 Python 3.8.0!

    那么,这次新发布的 Python 3.8.0 有哪些重要的改进呢?以下是是 Python 3.8 相比 3.7 的新增特性。

    小小詹同学
  • python 函数回调

    def apply_async(func, args, , callback): # Compute the result result = func(ar...

    用户5760343
  • 会用python把linux命令写一遍的人,进大厂有多容易?

    看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。

    小小詹同学
  • 15年来这8门编程语言位置十分稳定

    导读:TIOBE 编程语言排行榜 10 月份的榜单已公布,这期的标题比较有趣 —— “Top 8 of the TIOBE index quite stable...

    华章科技
  • 图解Python 函数

    如果想要定义函数,则需要以“def 函数名():”的格式为开头编写代码。在这之下的一个模块就是一个函数的范围。Python的模块就如前文中提到的,是根据缩进的等...

    用户1260737
  • 【PySpark入门】手把手实现PySpark机器学习项目-回归算法

    PySpark作为工业界常用于处理大数据以及分布式计算的工具,特别是在算法建模时起到了非常大的作用。PySpark如何建模呢?这篇文章手把手带你入门PySpa...

    zenRRan
  • 爬取许嵩新歌《雨幕》弹幕,告诉你什么才是真正的创作!

    首先,利用哔哩哔哩的弹幕接口,把数据保存到本地。接着,对数据进行分词。最后,做了评论的可视化。

    小小詹同学

扫码关注云+社区

领取腾讯云代金券