2.3利用add(x,y,f)函数,计 算
import math
def add(x, y, f):
return f(x) + f(y)
print add(25, 9, math.sqrt)
2.4.map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:
输入:['adam', 'LISA', 'barT']
输出:['Adam', 'Lisa', 'Bart']
def format_name(s):
return s[0][0].upper() + s[1:].lower()
print map(format_name, ['adam', 'LISA', 'barT'])
(python3中输出:print (list(map(format_name, ['adam', 'LISA', 'barT'])))
2.5任务Python内置了求和函数sum(),但没有求积的函数,请利用reduce()来求积:(python3中无法直接使用:from functools import 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])
2.6、filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:
2.7、sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。def is_not_empty(s): return s and len(s.strip()) > 0 filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
请利用sorted()高阶函数,实现忽略大小写排序的算法。
输入:['bob', 'about', 'Zoo', 'Credit']
输出:['about', 'bob', 'Credit', 'Zoo']def cmp_ignore_case(s1, s2): u1 = s1.upper() u2 = s2.upper() if u1 < u2: return -1 if u1 > u2: return 1 return 0 print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
2.8、返回函数:请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
def calc_prod(lst): def lazy_prod(): def f(x, y): return x * y return reduce(f, lst, 1) return lazy_prod f = calc_prod([1, 2, 3, 4]) print f()
2.9使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码:sorted([1, 3, 9, 5, 0], lambda x,y: -cmp(x,y)) [9, 5, 3, 1, 0]
2.15
,functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值
import functools sorted_ignore_case = functools.partial(sorted,cmp=lambda s1,s2:cmp(s1.lower(),s2.lower())) print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])