Python入门之高阶函数、内置高阶函数

落日映苍穹つ 2021-12-10 22:57 564阅读 0赞

一、高阶函数

(1)高阶函数的实参是一个函数名

(2)函数的返回值是一个函数

函数本身也可以赋值给变量,变量也可以指向函数

  1. f = abs
  2. print(f(-10))

20190711210226588.png

传递的参数包括函数名

  1. def fun(x,y,f):
  2. return f(x),f(y)
  3. print(fun(-10,34,abs))

20190711210331830.png

  1. map()函数

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

(1)对于序列[ -1,3,-5,-2]的每个元素求绝对值

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

20190711210448749.png

(2)有10个2-7之间的随机数,对每个元素求阶乘

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

20190711211810491.png

(3)将字符串转化成列表类型

  1. s = '1 3 5 7 9'
  2. print(list(map(int,s.split())))

20190711211922352.png

  1. reduce函数

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

  1. from functools import reduce
  2. def multi(x,y):
  3. return x*y
  4. print(reduce(multi,range(1,5)))

20190711212238425.png

  1. filter过滤函数

接收一个函数一个序列,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(1,101))))

20190711212409804.png

  1. sorted函数:排序函数

默认sort和sorted由小到大排序,reverse=True由大到小排序

  1. li = [2,1,4,3]
  2. li.sort()
  3. print(li)
  4. a = sorted(li,reverse=True)
  5. print(a)

20190711212551155.png

  1. info = [
  2. ('apple1',200,32),
  3. ('apple2',40,12),
  4. ('apple3',40,2),
  5. ('apple4',1000,23),
  6. ('apple5',40,5),
  7. ]
  8. print(sorted(info))
  9. #按照商品数量进行排序
  10. def sorted_by_count(x):
  11. return x[1]
  12. #按照商品价格排序
  13. def sorted_by_price(x):
  14. return x[2]
  15. #先按照商品数量由小到大排序,如果商品数量一样,则按照商品价格由小到大排序
  16. def sorted_by_count_price(x):
  17. return x[1],x[2]
  18. print(sorted(info,key=sorted_by_count))
  19. print(sorted(info,key=sorted_by_price))
  20. print(sorted(info,key=sorted_by_count_price))

20190711212904580.png

练习:给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;在原始数组上进行移动操作, 勿创建新的数组;

输入:第一行是数组长度, 后续每一行是数组的一条记录,如 1 0 2 8 0 0

输出:调整后数组的内容,输出结果为 1 2 8 0 0 0

  1. a = ''.join(input().split())
  2. li = [int(i) for i in a]
  3. def f(x):
  4. if x == 0:
  5. return 1
  6. else:
  7. return 0
  8. print(sorted(li,key=f))

20190711213715151.png

  1. 匿名函数

关键字为lambda,冒号前面是形参,冒号后面是返回值

(1)使用匿名函数求和

  1. from functools import reduce
  2. print(reduce(lambda x,y:x+y,[1,2,3,4,5]))

20190711213920256.png

(2)找出1-100之间的所有偶数

  1. print(list(filter(lambda x:x%2==0,range(1,101))))

20190711214113861.png (3)移动列表中的0到最后

  1. nums = [0, 7, 0, 1, 2, 1, 5,1, 7, 8, 0, 67, 1, 3, 4]
  2. print(sorted(nums,key=lambda x:1 if x == 0 else 0))

20190711214217916.png

发表评论

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

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

相关阅读

    相关 Python函数

    一、什么是高阶函数 函数作为实参传递给函数的或者函数名为返回值的函数称为高阶函数。 1)实参传递给函数 ![Center][] 2)函数名为返回值 ![2018

    相关 python函数

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