python学习日记八高阶函数的运用

编写一个简单的高阶函数:
def add(x,y,f):
return f(x)+f(y)
如果传入abs作为参数的f值:
add(-5,9,abs)
根据函数的定义,函数执行的代码实际是:
abs(-5)+abs(9)
由于参数x,y和f都可以任意的传入,如果f传入其他函数可以得到不同的返回值。
大家可以自行编写运行这个函数。

下面重点介绍几个较为常见的高阶函数

map()函数

map函数它接收一个函数f和一个list,并通过把函数f一次作用在list的每个元素上,得到一个新的list并返回。
例如,对于list[1,2,3,4,5,6,7,8,9]
如果希望把list的每个元素都作平方,就可以用map()函数:
在这里插入图片描述
因此我们只需要传入函数f(x)=x*x,就利用map()函数完成这个计算:

def f(x):
    return x*x
print (map(f,[1,2,3,4,5,6,7,8,9]))
 

输出的结果:
[1,4,9,16,25,36,49,64,81]
注意:由于list包含的元素可以是任何类型,因此,map() 可以处理任意类型的list。

reduce()函数

reduce()函数接受的参数也为一个f和一个list,但是与map()不同的是,reduce()传入的函数f必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
例如,python内置了求和的函数sum(),但没有求积的函数,利用reduce()来求积。
输入:[2,4,5,7,12]
输出:2×4×5×7×12的结果。

def prod(x,y):
      return x*y
 print  (reduce(prod,[2,4,5,7,12]))
 

调用reduce(prod,[2,4,5,7,12])时,reduce函数将做如下计算:
先计算头两个元素,prod(2,4),结果为8;
再把结果和第3个元素计算,prod(8,5),结果为40;
再把结果和第4个元素计算:prod(40, 7),结果为280;
再把结果和第5个元素计算:prod(280, 12),结果为3360;
由于没有更多的元素了,计算结束,返回结果3360。

filter()函数

filter()函数接收一个函数f和一个list,这个函数f的作用是对每一个函数进行判断,返回Ture或False,filter()根据判断结果自动滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例如利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
首先,要编写一个判断平方根是整数的函数:
然后利用filter()过滤掉。

import math
def is_sqr(x):
    return math.sqrt(x)%1==0
 print (filter(is_sqr,range(1,101)))

除此之外,利用filter(),可以完成很多有用的功能,例如,删除None或者空字符串:
def is_not_empty(s):
return s and len(s.strip()) > 0
filter(is_not_empty, [‘test’, None, ‘’, ‘str’, ’ ‘, ‘END’])结果:
[‘test’, ‘str’, ‘END’]
注意:
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ‘),如下:
a = ’ 123’
a.strip()
结果: ‘123’
a=’\t\t123\r\n’
a.strip()
结果:‘123’

sorted()函数

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

sorted([36,5,12,9,21])
[5,9,12,21,36]
sorted()对字符串进行排序,字符串默认按照ASCII大小进行排序。

sorted([‘bob’, ‘about’, ‘Zoo’, ‘Credit’])
[‘Credit’, ‘Zoo’, ‘about’, ‘bob’]

例如,对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。
输入:[‘bob’, ‘about’, ‘Zoo’, ‘Credit’]
输出:[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]

def cmp_ignore_case(s1,s2):
    x1=s2.upper()
    x2=s2.upper()
    if x1>x2:
       return 1
    if x2>x1:
       return -1
     return 0
print (sorted(['bob','about','Zoo','Credit'],cmp_ignore_case))

方法二

def cmp_ignore_case(s1,s2):
    return cmp(s1.lower(), s2.lower())
print  (sorted(['bob','about','Zoo','Credit'],cmp_ignore_case))
    
今天的分享就到这里。欢迎大家来指点和一起学习,我是爱吃肉的python小白yyyloki,如果你觉得不错的话,那就给我点个👍吧!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值