失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python之高阶函数(abs map reduce filter lambda匿名函数)

Python之高阶函数(abs map reduce filter lambda匿名函数)

时间:2021-03-02 15:37:54

相关推荐

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 randomdef factoria(x):res = 1for i in range(1,x+1):res = res * ireturn resli = [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 reducedef multi(x,y):return x*yprint(reduce(multi,range(1,5)))def add(x,y):return x+yprint(reduce(add,range(1,6)))[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test2.py 2415

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 Trueelse:return Falseprint(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 reducedef str2int(s):def char2int(ch):c = {str(x): x for x in range(10)}return c[ch]def fun(n1, n2):return n1 * 10 + n2return 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 reducedef 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+ydef after_c2n(x,y):return x*0.1+yreturn 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之高阶函数(abs map reduce filter lambda匿名函数)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。