这篇文章简谈高阶函数与Python3中几个内置函数的例题
高阶函数就是能接受函数作参数的函数。
我们知道变量可以指向函数,而函数的参数可以接受变量,
一个函数可以接收另一个函数作为参数,
能接受函数作为参数的函数就是高阶函数。
比如说,一个简单的高阶函数:
def shu_1():
print("宇宙之大")
def shu2(x):
z=x()
print("个人之小")
shu2(shu_1) #参数为函数
内置函数与高阶函数例题中的使用:
- math.sqrt函数(内置数学模块中的函数)
题目:一个使用数学模块中计算两数平方根之和的函数:
import math
def add(x, y, f):
return f(x) + f(y)
#x和y可以传任意传入,f我们则传入一个计算平方根的函数
print(add(25,25,math.sqrt))
- map()函数
map() 会根据提供的函数对指定序列做映射。
用法:map(function, iterable, …)
function – 函数, iterable – 一个或多个序列。
题目:没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list
def format_name(s):
return s.title()
list(map(format_name, ['adam', 'LISA', 'barT']))
- Reduce函数
reduce函数也是一个参数为函数,一个为可迭代对象的高阶函数,其返回值为一个值而不是迭代器对象,故其常用与叠加、叠乘等。
题目:请利用recude()来求积:
输入:[2, 4, 5, 7, 12]
输出:245712的结果
from functools import reduce #在Python3中reduce函数不再是内置函数,需要从functools模块导入
def prod(x, y):
return x*y
print(reduce(prod, [2, 4, 5, 7, 12]))
- filter函数
filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例题:请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
import math
def is_sqr(x):
r=int(math.sqrt(x)) #取整数用下一步计算判断其平方是否等于原值
return r*r==x
list(filter(is_sqr, range(1, 101)))
- sorted函数
sorted 语法:
sorted(iterable, key=None, reverse=False)
参数说明:
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sorted与sort不同之处有几点:sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
题目:对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。
输入:[‘bob’, ‘about’, ‘Zoo’, ‘Credit’]
输出:[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]
def cmp_ignore_case(s1, s2):
x = s1.upper()
y = s2.upper()
if x<y:
return -1
if x>y:
return 1
return 0
print(sorted(['bob','about', 'Zoo', 'Credit'], key = lambda x: x.upper())) #注释如下
<!-- 对key = lambda x: x的注释:当待排序列表的元素由多字段构成时,我们可以通过sorted参数key来制定我们根据那个字段对列表元素进行排序。
key=lambda 元素: 元素[字段索引]
例如:想对元素第二个字段排序,则
key=lambda x: x[1] -->
Python还有很多内置高阶函数。我们先写到这里。