Python进阶学习笔记-2

来源:互联网 发布:网络安全教育视频下载 编辑:程序博客网 时间:2024/04/30 05:08

1、高阶函数的概念

高阶函数:能够接收函数作为参数的函数就是高阶函数。

例如f = abs(-19),abs本身就是求绝对值的函数,他可以做为变量的值。再举一个列子:

<span style="font-family:Microsoft YaHei;">def add(x,y,z):return z(x) + z(y)  #样式如下abs(x) + abs(y)print add(9,-8,abs)</span>
输出结果:17  【9的绝对值 + -8的绝对值】

再举一个例子:

比如说求x 和 y的开方之和,,这里我们需要用到的函数是sqrt函数 ,  

执行代码如下:

def add(x,y,z):      return int(z(x) + z(y))  #因为sqrt函数返回值是双精度类型所以我们转换为整形跟好看写哈哈哈!print add(9,8,sqrt)

这样在执行之后会如何呢,当然是报错的,因为sqrt函数是来自math模块的。所以我们必须先调用math模块,完整

代码如下:

import mathdef  add(x,y,z):       return int(z(x) + z(y))print add(9,8,math.sqrt)


2、map函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个list
并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
举个例子,如果我们需要将一个列表中的元素的首字母变成大写,那么我们可以写如下代码:
def upper1(x):return x.title()  #title函数要将所有单词的首字母变为大写其余变为小写print map(upper1, ['adam', 'LISA', 'barT'])
这里需要提出的一点就是title函数,作用说明见语句注释。

3、reduce函数

reduce()函数也是Python内置的一个高阶函数。
reduce()函数接收的参数和 map()类似,一个函数 f,一个list
但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,
reduce()对list的每个元素反复调用函数f,并返回最终结果值。
打个比方:假设有一个sum函数,接受x和y,并返回x和y之和。
def sum(x,y):return x + yprint reduce(sum,range(1,8))
如上述代码,reduce()会对1--7之间的数都进行加法,1+2+3+...+7

4、filter函数

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list
这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉
不符合条件的元素,返回由符合条件元素组成的新list。
例如:我们需要对1--100之间的数过滤出偶数。
在不是用filter函数的情况下我们可以用for函数进行遍历
L = range(1,101)for x in L:if x % 2 == 0:print x
但是有了filter函数之后我们可以通过建立函数过滤。代码如下:
def filter1(x):return x % 2 ==0 #判断是否能被2整除print filter(filter1,range(1,101))

5、sorted函数

在基础的课程中有介绍过sort方法进行列表的排序,今天介绍的是sorted函数。那么问题来了,两者之前有什么不同呢
看个例子 :
>>> l = [2,1,8,5,48,4]
>>> sorted(l)
[1, 2, 4, 5, 8, 48]
>>> print l
[2, 1, 8, 5, 48, 4]
你会发现,使用sorted函数之后序列本身并没有被改变,而使用sort方法则会改变列表本身的排序有影响:
>>> l = [2,1,8,5,48,4]
>>> l.sort()
>>> print l
[1, 2, 4, 5, 8, 48]

Python内置的 sorted()函数可对list进行排序:

>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]

但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

因此,如果我们要实现倒序排序,只需要编写一个reversed_cmp函数:

def reversed_cmp(x, y):    if x > y:        return -1    if x < y:        return 1    return 0

这样,调用 sorted() 并传入 reversed_cmp 就可以实现倒序排序:

>>> sorted([36, 5, 12, 9, 21], reversed_cmp)[36, 21, 12, 9, 5]

sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'])['Credit', 'Zoo', 'about', 'bob']

'Zoo'排在'about'之前是因为'Z'的ASCII码比'a'小。



















0 0
原创粉丝点击