Python中的函数式编程概念

Python中的函数式编程(Functional Programming)是一种编程范式,它强调使用函数作为主要的编程构建块,并且避免改变状态(即避免使用可变的数据结构和变量)和可变数据。虽然Python本身是一种多范式编程语言,支持面向对象编程、命令式编程等,但它也支持函数式编程的许多特性。

以下是函数式编程的一些核心概念,以及它们在Python中的体现:

  1. 高阶函数(Higher-Order Functions)
    高阶函数是那些接受函数作为参数或返回函数的函数。在Python中,函数是一等公民,可以作为参数传递给其他函数,也可以从其他函数返回。

     

    python复制代码

    def apply_func(func, x):
    return func(x)
    def square(x):
    return x ** 2
    result = apply_func(square, 5) # 结果为 25
  2. 纯函数(Pure Functions)
    纯函数是那些对于相同的输入总是返回相同输出的函数,并且不产生任何可观察的副作用(如修改全局变量或I/O操作)。在函数式编程中,尽量使用纯函数可以帮助减少程序的复杂性和错误。

     

    python复制代码

    def greet(name):
    return f"Hello, {name}!"
    # greet 是一个纯函数
  3. 不可变性(Immutability)
    函数式编程通常偏好使用不可变的数据结构,这意味着一旦创建了一个数据结构,就不能再修改它。在Python中,元组(tuples)和冻结集合(frozensets)是不可变的,而列表(lists)和字典(dicts)是可变的。

     

    python复制代码

    # 不可变的元组
    t = (1, 2, 3)
    # 试图修改元组会抛出异常
    # t[0] = 4 # TypeError: 'tuple' object does not support item assignment
  4. 递归(Recursion)
    函数式编程经常使用递归作为处理数据结构(如列表和树)的方式,而不是使用循环。

     

    python复制代码

    def factorial(n):
    if n == 0:
    return 1
    else:
    return n * factorial(n - 1)
  5. 部分应用(Partial Application)和柯里化(Currying)
    部分应用是创建一个接受较少参数的新函数的过程,该函数会记住一些参数供稍后使用。柯里化是将一个接受多个参数的函数转换成一系列接受一个参数的函数的技术。Python的functools.partial可以用于部分应用。

     

    python复制代码

    from functools import partial
    def add(x, y, z):
    return x + y + z
    add_five = partial(add, 5) # 部分应用,固定了第一个参数为5
    result = add_five(10, 15) # 结果为 30
  6. 映射(Map)、过滤(Filter)和归约(Reduce)
    这些是函数式编程中常见的操作,它们可以对集合中的每个元素应用一个函数,并返回一个新的集合。在Python中,可以使用内置的map()filter(), 和 reduce()函数,或者列表推导式来实现这些操作。

     

    python复制代码

    numbers = [1, 2, 3, 4, 5]
    squares = list(map(lambda x: x ** 2, numbers)) # [1, 4, 9, 16, 25]
    evens = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
    from functools import reduce
    sum_of_squares = reduce(lambda x, y: x + y, map(lambda x: x ** 2, numbers)) # 55
  7. Lambda 函数(Lambda Functions)
    Lambda函数是匿名的小函数,常用于需要函数作为参数的场合。在Python中,它们使用lambda关键字定义。

     

    python复制代码

    add_one = lambda x: x + 1
    result = add_one(5) # 结果为 6
  8. 惰性求值(Lazy Evaluation)和生成器(Generators)
    惰性求值是一种只在需要时才计算值的策略。Python的生成器是惰性求值的一个例子,它们只在迭代时生成值。

     

    python复制代码

    def squares(n):
    for i in range(n):
    yield i ** 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 ——网络层(IPv4地址)

计算机网络 ——网络层(IPv4地址) 什么是IPv4地址IP地址的分类特殊的IP地址 查看自己的IPv4地址 我们今天来看IPv4地址: 什么是IPv4地址 IPv4(Internet Protocol version 4)是第四版互联网协议,是第一个被…

使用CodeGen进行程序综合推理

Program Synthesis with CodeGen — ROCm Blogs (amd.com) CodeGen是基于标准Transformer的自回归语言模型家族,用于程序合成,正如作者所定义的,它是一种利用输入-输出示例或自然语言描述生成解决指定问题的计算机程序的方法。 我们将测试的…

mqtt-emqx:paho.mqttv5的简单例子

# 安装emqx 请参考【https://blog.csdn.net/chenhz2284/article/details/139551293?spm1001.2014.3001.5502】 # 下面是示例代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</…

[office] excel做曲线图的方法步骤详解 #经验分享#知识分享#其他

excel做曲线图的方法步骤详解 Excel是当今社会最流行用的办公软件之一&#xff0c;Excel可以用于数据的整理、分析、对比。可以更直观的看到数据的变化情况&#xff0c;而有很多时候需要制作曲线图表进行数据比较&#xff0c;因此&#xff0c;下面是小编整理的如何用excel做曲线…

spark-3.5.1+Hadoop 3.4.0+Hive4.0 分布式集群 安装配置

Hadoop安装参考: Hadoop 3.4.0HBase2.5.8ZooKeeper3.8.4Hive4.0Sqoop 分布式高可用集群部署安装 大数据系列二-CSDN博客 一 下载:Downloads | Apache Spark 1 下载Maven – Welcome to Apache Maven # maven安装及配置教程 wget https://dlcdn.apache.org/maven/maven-3/3.8…

二叉树的右视图-力扣

这道题目是二叉树的层序遍历的扩展&#xff0c;对二叉树进行层序遍历&#xff0c;判断节点是否为该层的最后一个节点&#xff0c;如果是&#xff0c;则将其的数值添加到返回数组中。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode…

mqtt-emqx:简单安装emqx

安装依赖 yum install -y epel-release libatomic下载 cd /chz/install/emqx wget https://www.emqx.com/en/downloads/broker/5.7.0/emqx-5.7.0-el7-amd64.tar.gz解压 mkdir -p emqx && tar -zxvf emqx-5.7.0-el7-amd64.tar.gz -C emqx后台运行 cd /chz/install/e…

10、有条件提前退出关键字Return From Keyword If【robot framework】

在 Robot Framework 中&#xff0c;Return From Keyword If 是一个有用的关键字&#xff0c;它允许你在特定条件下从关键字中返回。这在需要在满足某个条件时提前退出关键字的情况下特别有用。 以下是 Return From Keyword If 的语法和使用示例&#xff1a; 语法 Return From…

分布式事务Seata中XA和AT模式介绍

Seata中XA和AT模式介绍 分布式事务介绍分布式解决方案解决分布式事务的思路Seata的架构Seata中的XA模式Seata的XA模型流程XA模式优缺点实现XA模式 Seata中的AT模式Seata中的AT模式流程实现AT模式AT模式优缺点 AT模式与XA模式的区别 分布式事务介绍 分布式事务&#xff0c;就是…

Hbase中Rowkey的设计方法

Hbase中Rowkey的设计方法 过去对于Rowkey设计方法缺乏理解&#xff0c;最近结合多篇博主的文章&#xff0c;进行了学习。有不少心得体会。总结下来供后续学习和回顾。 ##一、设计Rowkey的三个原则 1.长度原则&#xff1a;长度不能太长&#xff0c;小于100个字节。可以偏端一…

TypeScript是前端语言吗:一场深入而复杂的探讨

TypeScript是前端语言吗&#xff1a;一场深入而复杂的探讨 在编程的世界里&#xff0c;TypeScript是否属于前端语言&#xff0c;似乎是一个简单而又复杂的问题。它似乎简单得可以直接回答“是”或“否”&#xff0c;然而&#xff0c;深入其背后&#xff0c;我们却会发现这个问…

代码随想录算法训练营第36期DAY50

DAY50 如果写累了就去写套磁信吧。 198打家劫舍 class Solution {public: int rob(vector<int>& nums) { vector<int> dp(nums.size()); dp[0]nums[0]; if(nums.size()1) return nums[0]; dp[1]max(nums[0],nums[1]); …

【中颖】SH79F9202 串口通信

头文件 uart.h #ifndef UART_H #define UART_H#include "SH79F9202.h" #include "LCD.h" #include "timer2.h" #include "timer5.h" #include "cpu.h" #include "key.h" #include "io.h" #include &qu…

Meta Llama 3 RMSNorm(Root Mean Square Layer Normalization)

Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09; flyfish 目录 Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09;先看LayerNorm和BatchNorm举个例子计算 LayerNormRMSNorm 的整个计算过程实际代码实现结…

OpenCV的核心数据结构

Mat类 Mat类是OpenCV中最重要的数据结构之一&#xff0c;用于表示图像和矩阵数据。Mat类封装了多维数组&#xff0c;并提供了多种操作图像数据的方法和函数。 Mat类的主要属性和方法 构造函数&#xff1a; Mat()&#xff1a;创建一个空的Mat对象。Mat(int rows, int cols, int…

Linux内核epoll

Linux网络IO模型 同步和异步&#xff0c;阻塞和非阻塞 Linux下的五种IO模型 同步和异步&#xff0c;阻塞和非阻塞 Linux 下的五种I/O模型&#xff1a; 阻塞IO&#xff08;Blocking IO&#xff09; BIO 非阻塞IO&#xff08;No Blocking IO&#xff09; IO复用&#xff08;se…

Linux系统管理磁盘管理004

本章主要讲述详细lvm扩容。 操作系统&#xff1a; CentOS Stream 9 扩容目标&#xff1a; jianglv扩容到600MB 扩容前 [rootlocalhost ~]# lvdisplay lgb--- Logical volume ---LV Path /dev/lgb/nginx_lvmLV Name nginx_lvmVG Name …

DEJA_VU3D - Cesium功能集 之 121-底图机制

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,工作原因可能无法像以前那样周更2-3篇,但是闲下来还是会不定期的更新,Cesium不…

手把手教你实现条纹结构光三维重建(1)——多频条纹生成

关于条纹结构光三维重建的多频相移、格雷码、格雷码相移、互补格雷码等等编码方法&#xff0c;我们在大多数平台上&#xff0c;包括现在使用语言大模型提问&#xff0c;都可以搜到相关的理论&#xff0c;本人重点是想教会你怎么快速用代码实现。 首先说下硬件要求&#xff0c;…

从0到1:企业办公审批小程序开发笔记

可行性分析 企业办公审批小程序&#xff0c;适合各大公司&#xff0c;企业&#xff0c;机关部门办公审批流程&#xff0c;适用于请假审批&#xff0c;报销审批&#xff0c;外出审批&#xff0c;合同审批&#xff0c;采购审批&#xff0c;入职审批&#xff0c;其他审批等规划化…