Python高级用法总结(8)-函数式编程

wx614070971eedb 2021-09-15 09:50:47
Python for循环 函数式编程 迭代 匿名函数


Python混合支持多种编程范式,对于函数式编程,Python提供了一整套进行函数式编程的工具,如map、filter以及reduce等。

一、在可迭代对象上映射函数-map

比如实现一个列表的简单操作,给列表中的每个元素增加10。可以简单地使用for循环来更新一个列表中所有数字:

 

  •  
li = [1,2,3,4,5]up = []for x in li: up.append(x+10)print(up)
  • 1.
  • 1.
  • 1.
  • 1.
  • 1.

Python结果如下:

Python高级用法总结(8)-函数式编程_for循环

如果使用map函数实现,map函数可以将被传入的函数作用到一个可迭代对象的每一个元素上,并且可返回包含了所有这些函数调用结果的一个列表,如下代码:

  •  
li = [1,2,3,4,5]def inc(x): return(x+10)print(list(map(inc, li)))
  • 1.
  • 1.
  • 1.
  • 1.

Python结果如下:

Python高级用法总结(8)-函数式编程_迭代_02

上面这个代码还可以进行改进,之前给大家介绍过lambda函数,还记得吗,它可以实现匿名函数,这一点与map的需求不谋而合。实际在这里显示定义inc函数没有必要,只需给map传一个lambda匿名函数即可:

  •  
li= [1,2,3,4,5]print(list(map((lambda x:x+10),li)))
  • 1.
  • 1.

Python结果如下:

Python高级用法总结(8)-函数式编程_for循环_03

二、过滤器-Filter

filter函数可以实现选择可迭代对象中的元素,即实现相当于“过滤器”或“选择器”的功能。如下面代码实现过滤出列表中大于0的元素功能:

  •  
print(list(range(-5,5)))print(list(filter((lambda x: x>0),range(-5,5))))
  • 1.
  • 1.

如下图结果所示,filter函数可以实现过滤器的功能,过滤条件就是第一个参数所接收的函数。

当然也可以使用for循环加上if条件语句,实现同样过滤效果:

Python高级用法总结(8)-函数式编程_迭代_04

三、处理器-Reduce

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

 

Python高级用法总结(8)-函数式编程_函数式编程_05

 

 

版权声明
本文为[wx614070971eedb]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15367641/3889310

  1. The first starcoin & move hacksong source code analysis - P (a)
  2. Zhaijia 36 days Salt Fish turn into Tencent, Zookeeper Consistency level analysis,
  3. Traitement de l'interception des champs de demande communs de Spring Cloud, plus de 500 personnes interviewent Ali,
  4. About JavaScript modules
  5. Object oriented programming (2)
  6. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法
  7. Java日期時間API系列42-----一種高效的中文日期格式化和解析方法
  8. 宅家36天鹹魚翻身入職騰訊,Zookeeper一致性級別分析,
  9. Java Date Time API Series 42 - - a efficient Chinese Date Format and Analysis Method
  10. 已成功拿下字节、腾讯、脉脉offer,7年老Java一次操蛋的面试经历,
  11. 小米Java社招面试,每次面试必问的二叉树的设计与编码,
  12. 小米Java校招面试,阿里、百度、美团、携程、蚂蚁面经分享,
  13. 小米Java校招面試,阿裏、百度、美團、攜程、螞蟻面經分享,
  14. Xiaomi Java School Recruitment interview, Ali, baidu, meituan, ctrip, ant Facebook Sharing,
  15. La conception et le codage de l'arbre binaire requis pour chaque entrevue d'embauche de la société Java millet;
  16. A remporté avec succès Byte, Tencent, Pulse offer, 7 ans Java une expérience d'entrevue de baise,
  17. 干货来袭,Java岗面试12家大厂成功跳槽,
  18. 常用Java框架面试题目,现在做Java开发有前途吗?
  19. 常用Java框架面試題目,現在做Java開發有前途嗎?
  20. Les questions d'entrevue couramment utilisées pour le cadre Java sont - elles prometteuses pour le développement Java?
  21. L'arrivée de marchandises sèches, l'entretien d'emploi Java 12 grandes usines ont réussi à changer d'emploi,
  22. Multiple postures for handling container time in k8s environment
  23. Echarts remove left Gap, Blank
  24. Hotspot Weekly | zoom $100 million, docker fees, $38 billion Data bricks
  25. JsonMappingException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory...
  26. Java. Security. Securerandom source code analysis Java. Security. EGD = file: / dev /. / urandom
  27. When using IntelliJ idea, jump directly and quickly from the mapper interface to mapper.xml
  28. When idea writes SQL in mybatis XML, the solution to the problems of table name, field and red reporting
  29. Spring cloud integrates Nacos
  30. 应届毕业生Java笔试题目,2021大厂Java社招最全面试题,
  31. Liver explosion! Take you to understand Hadoop serialization
  32. linux系列之:告诉他,他根本不懂kill
  33. java版gRPC实战之三:服务端流
  34. RabbitMQ核心知识总结!
  35. linux系列之:告诉他,他根本不懂kill
  36. java版gRPC实战之三:服务端流
  37. RabbitMQ核心知识总结!
  38. 10天拿到字节跳动Java岗位offer,学习Java开发的步骤
  39. 10天拿到字节跳动Java岗位offer,Java知识点思维导图
  40. Résumé des connaissances de base de rabbitmq!
  41. 10天拿到字節跳動Java崗比特offer,Java知識點思維導圖
  42. 10 jours pour obtenir un Byte Jump Java post offer, Java Knowledge point Mind Map
  43. 10 jours pour obtenir l'octet Jump Java post offer, apprendre les étapes du développement Java
  44. Java version of gppc Reality Three: server side stream
  45. Linux Series: Dites - lui qu'il ne connaît pas kill du tout
  46. "Data structure and algorithm" of front end -- binary search
  47. 2020-2021京东Java面试真题解析,如何才能通过一线互联网公司面试
  48. 13 SpringBoot整合RocketMQ实现过滤消息-根据SQL表达式过滤消息
  49. 12 SpringBoot整合RocketMQ实现过滤消息-根据TAG方式过滤消息
  50. 11 SpringBoot整合RocketMQ实现事务消息
  51. 11 springboot Consolidated rocketmq Implementation transaction message
  52. 12 springboot Consolidated rocketmq Implements Filtering messages - Filtering messages according to tag method
  53. 13 springboot Consolidated rocketmq Implementation Filtering messages - Filtering messages according to SQL expressions
  54. linux系列之:告诉他,他根本不懂kill
  55. (1)java Spring Cloud+Spring boot企业快速开发架构之微服务是什么?它的优缺点有哪些?
  56. Oracle 检查 DATE 列 RANGE 分区表已有分区的最大日期时间
  57. ConcurrentHashMap--原理
  58. 2020 - 2021 JD Java interview Real question Analysis, How can interview through First - Line Internet Company
  59. Concurrenthashmap - - Principes
  60. Oracle vérifie l'heure de date maximale d'une partition existante dans la colonne date