python中的高阶函数

红太狼 2023-06-25 06:11 140阅读 0赞

1.高阶函数

高阶函数
-实参是一个函数
-函数的返回值也是一个函数
函数本身也是可以赋值给变量的 变量可以指向函数

  1. print(abs(-10))
  2. f = abs #f=1
  3. print(f(-10))
  4. def fun(x,y,f):
  5. return f(x),f(y)
  6. print(fun(-10,34,abs))

2.内置高阶函数map

map():接收两个参数,一个是函数 一个是序列
map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回

eg: 对一个序列[-1,3,-4,-5]的每一个元素求绝对值

  1. print(list(map(abs,[-1,3,-4,-5])))

eg: 对每个元素求阶乘

  1. def f(x):
  2. """对x求阶乘"""
  3. res = 1
  4. for i in range(1,x+1):
  5. res = res * i
  6. return res
  7. li = [random.randint(2,7) for i in range(10)]
  8. print(list(map(f,li)))

3.内置高阶函数reduce

reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4]) = f(f(x1,x2),x3),x4)

python2中:reduce是内置函数
python3中:需要引入模块from functools import reduce:

  1. from functools import reduce
  2. def multi(x,y):
  3. return x * y
  4. print(reduce(multi,range(1,10)))
  5. def add(x,y):
  6. return x+y
  7. print(reduce(add,range(1,101)))

4.高阶函数练习

将一个字符串(‘331’)转换成整型

  1. from functools import reduce
  2. def str2int(s):
  3. def char2int(ch):
  4. c = { str(x): x for x in range(10)}
  5. print(c)
  6. return c[ch]
  7. def fun(n1,n2):
  8. return n1 * 10 + n2
  9. return reduce(fun,map(char2int,s))
  10. num = str2int('1234')
  11. print(type(num),num)

5.内置高阶函数filter

filter过滤函数
和map()类似的,也接收一个函数和一个序列
但是和map()不同的是 filter()把传入的函数依次作用于
序列的每个元素 然后根据返回值是True或者False决定保留还是丢弃该元素

  1. def isodd(num):
  2. if num % 2 == 0:
  3. return True
  4. else:
  5. return False
  6. print(list(filter(isodd,range(100))))

结果:
在这里插入图片描述

6.匿名函数

匿名函数的关键字 lambda
冒号前面是 形参 冒号后面是返回值

  1. from functools import reduce
  2. # def add(x,y):
  3. # return x+y
  4. # print(reduce(add,range(100)))
  5. print(reduce(lambda x,y:x+y,range(100)))
  6. #
  7. # def mypow(num):
  8. # return num ** 2
  9. print(list(map(lambda x:x**2,range(5))))
  10. def isood(num):
  11. return num%2 ==0
  12. print(list(filter(lambda x:x%2==0,range(100))

7.练习
1.回数是指从左向右读和从右向左读都是一样的数,例如12321,909
。请利用filter()筛选出回数

  1. from functools import reduce
  2. def is_palindrome(n):
  3. l = list(str(n)) #['1','0' ]
  4. l.reverse() # ['0','1'] #
  5. # print(l.reverse())
  6. # 1*10+0 = 10
  7. num = reduce(lambda x,y:int(x) * 10 + int(y),l)
  8. return num == n
  9. a= is_palindrome('10')
  10. print(a)
  11. output = filter(is_palindrome,range(1,1000))
  12. print('1~1000:',list(output))
  13. def normalize(name):
  14. return list(map(lambda x:x.capitalize(),name))

2.利用map()函数,把用户输入的不规范的英文名字,
变为首字母大写,其他小写的规范名字

  1. L = ['adam','LISA','TOM']
  2. print(normalize(L))

3.利用map和reduce编写一个str2float函数,
把字符串’123.456’转换成浮点数123.456

  1. def str2float(s):
  2. ch = { str(x):x for x in range(10)}
  3. # 先将字符串分割
  4. l = s.split('.')
  5. # 将整数部分
  6. n1 = reduce(lambda x,y:x*10+y,map(lambda x:ch[x],l[0]))
  7. # 将小数部分
  8. n2 = reduce(lambda x,y:x*10+y,map(lambda x:ch[x],l[1]))
  9. n2 *= 0.1**len(l[1]) # a *=1 a = a*1 n2 = n2 * 0.1**4
  10. return n1 + n2
  11. num = str2float('1234.4567')
  12. print(num)

发表评论

表情:
评论列表 (有 0 条评论,140人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python函数

    1.高阶函数 > 高阶函数 > \-实参是一个函数 > \-函数的返回值也是一个函数 > 函数本身也是可以赋值给变量的 变量可以指向函数 print(a

    相关 python函数

           函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如pri