Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)
Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)
- 什么是内置高阶函数
高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
- abs函数
abs() 函数返回数字的绝对值。
示例:
>>> a = -16 >>> print(abs(a)) 16 >>> print(abs(-5)) 5 >>> f = abs >>> print(f(-10)) 10
函数本身也可以赋值给变量,变量可以指向函数:
[kiosk@foundation13 ~]$ vim test.py [kiosk@foundation13 ~]$ cat test.py def fun(x,y,f): return f(x),f(y) print(fun(-10,34,abs)) [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test.py (10, 34)
- map函数
map()函数接收的是两个参数,一个函数,一个序列(列表),其功能是将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回。
示例:
1.对于一个序列[-1,3,-4,-5]的每一个元素求绝对值
>>> print(list(map(abs,[-1,3,-4,-5]))) [1, 3, 4, 5]
2.对于每个元素求阶乘
[kiosk@foundation13 ~]$ vim test1.py [kiosk@foundation13 ~]$ cat test1.py import random def factoria(x): res = 1 for i in range(1,x+1): res = res * i return res li = [random.randint(2,7) for i in range(10)] print(list(map(factoria,li))) [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test1.py [2, 24, 24, 120, 5040, 720, 720, 2, 720, 24] [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test1.py [720, 720, 5040, 720, 5040, 5040, 24, 120, 24, 120] [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test1.py [5040, 720, 120, 2, 24, 5040, 720, 2, 6, 24]
- reduce函数
reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)
python2中:reduce是内置函数
python3中 from functools import reduce
示例:
[kiosk@foundation13 ~]$ vim test2.py [kiosk@foundation13 ~]$ cat test2.py from functools import reduce def multi(x,y): return x*y print(reduce(multi,range(1,5))) def add(x,y): return x+y print(reduce(add,range(1,6))) [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test2.py 24 15
- filter函数
和map()函数类似的,也接收一个函数和一个序列,但是和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素。
示例:
0~100之间的偶数:
[kiosk@foundation13 ~]$ vim test3.py [kiosk@foundation13 ~]$ cat test3.py def isodd(num): if num % 2 == 0: return True else: return False print(list(filter(isodd,range(100)))) [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test3.py [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
l
- lambda匿名函数
lambda()匿名函数是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
匿名函数的关键字为 lambda。
冒号前面是形参,冒号后面是返回值。
示例:
分别打印元素的累加、平方、范围内的所有偶数:
[kiosk@foundation13 ~]$ vim test4.py [kiosk@foundation13 ~]$ cat test4.py from functools import reduce # def add(x,y): # return x+y # print(reduce(add,range(10))) #累加 print(reduce(lambda x,y:x+y,range(10))) #每个元素的平方 print(list(map(lambda x:x**2,range(5)))) #偶数 print(list(filter(lambda x:x%2==0,range(10)))) [kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test4.py 45 [0, 1, 4, 9, 16] [0, 2, 4, 6, 8]
- 高阶函数的综合练习
1.将一个字符串转换成整型 ‘332.31321’
from functools import reduce def str2int(s): def char2int(ch): c = {str(x): x for x in range(10)} return c[ch] def fun(n1, n2): return n1 * 10 + n2 return reduce(fun, map(char2int, s)) num = str2int('12345') print(type(num), num)
2.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
def zz(x): return x.capitalize() name = input('请输入英文名字:') print(list(map(zz, name.split())))
3.利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456
from functools import reduce def str2float(s): s1 = s.split('.')[0] s2 = s.split('.')[1][::-1] c2n = {str(i):i for i in range(1,10)} def number(x): return c2n[x] def before_c2n(x,y): return x*10+y def after_c2n(x,y): return x*0.1+y return reduce(before_c2n,map(number,s1)) + 0.1*reduce(after_c2n,(map(number,s2))) print(str2float('345.678'))
4.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
def huishu(s): s = str(s) return s == s[::-1] li = [123,23432,121,4567,12421] print(list(filter(huishu,li)))
END
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- python几个重要的函数(lambda,filter,reduce,map,zip) 一、匿名函数lambda lambda argument1,argument2,...argumentN :e
- python中的lambda匿名函数以及针对序列的内建函数map、filter和reduce
- Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数
- Python学习之函数map filter reduce lambda的用法
- [Python] 函数lambda(), filter(), map(), reduce()
- [Python] 函数lambda(), filter(), map(), reduce()
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
- 【python】详解lambda匿名函数以及结合map、reduce、filter、sorted等使用
- python2,3中内建函数map,reduce,filter,sorted配合lambda
- Python中特殊函数和表达式 filter,map,reduce,lambda
- 【python】filter,map,reduce和lambda函数介绍
- Python 函数lambda(), filter(), map(), reduce()
- python3 常见函数 map、reduce、filter、lambda、sorted
- python几个重要的函数(lambda,filter,reduce,map,zip)
- python基础(函数式编程(高阶函数)map、filter、reduce、lambda匿名函数)
- python lambda函数 map,reduce, filter
- python--lambda表达式,高阶函数map,reduce,filter,sorted,闭包,偏函数,装饰器
- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- [Python] 函数lambda(), filter(), map(), reduce()