百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

用Python进行函数式编程(python函数程序)

off999 2025-06-04 00:39 41 浏览 0 评论

什么是函数式编程?

函数式程序设计是一种编程范例,它把计算当作数学函数的评价,避免状态和可变数据。换句话说,函数编程(FunctionalProgramming,FP)促进没有副作用和不变变量的代码。它是一种声明式的编程风格。它的主要关注点是“解决什么”,而不是以“如何解决”为重点的命令式风格。

入门Python其实很容易,但是我们要去坚持学习,每一天坚持很困难,我相信很多人学了一个星期就放弃了,为什么呢?其实没有好的学习资料给你去学习,你们是很难坚持的,这是小编收集的Python入门学习资料关注,转发,私信小编“01”,即可免费领取!希望对你们有帮助


函数编程概念

1.纯函数

纯函数有两个性质:

(A)它们不会产生副作用。
(B)如果输入相同,它们总是产生相同的输出。这意味着函数不能依赖于任何可变状态。

副作用可由以下原因引起:

  • 更改函数作用域以外的数据。
  • 更改函数中参数的值。
  • 抛出异常或因错误而停止。
  • 打印到控制台或读取用户输入。
  • 从文件中读取或写入文件。

让我们看一个不纯函数的例子 .

num2 = 3
# Adds two numbers, but uses the global `num2` variable.
def add_impure(num1):
    return num1 + num2

print(add_impure(5))

现在让我们来看看添加两个数字的纯函数。

# Adds two numbers, using the arguments passed to the function.
def add_pure(num1, num2):
    return num1 + num2

print(add_pure(5, 3))

2.不变性

在函数式编程中,我们不能在变量初始化后改变它的值。这意味着,如果我们需要更改列表中的值,则需要创建一个具有更新值的新列表,而不是更改现有的列表。在FP中,变量的不可变性质有助于在整个程序执行过程中保持状态。在Python中,诸如int、Float、Complex、String、tuple、冻结集、字节等数据类型是不可变的。

#  id() function returns a unique id for the specified object.
num1 = 21
print(id(num1))

num1 = 12
print(id(num1))

-----------------------------------------------------------------------------------
OUTPUT:

1705703664
1705703520
tuple1 = (0, 1, 2, 3) 
tuple1[0] = 4
print(tuple1)

-----------------------------------------------------------------------------------
OUTPUT:

Traceback (most recent call last):
  File "D:/LeetCode/FP.py", line 2, in <module>
    tuple1[0] = 4
TypeError: 'tuple' object does not support item assignment

Process finished with exit code 1

3.递归

在fp中,我们避免if-etc语句或循环,因为它在每次执行时都会创建不同的输出。函数程序对所有的迭代任务使用递归代替循环。递归是一种函数,它一次又一次地调用自己,直到满足退出条件。

# returns factorial of a number
def factorial(num):

    if num == 1:
        return 1
    else:
        return num * factorial(num - 1)

  
print(factorial(5))

4.函数是一级的,可以是高阶的。

I nFP,功能被视为数据类型,并可与任何其他值一样使用。你可以分配f功能对于变量,将它们存储在数据结构中,将它们作为参数传递,或者在控制结构中使用它们。例如,我们可以用函数填充数组,将它们作为参数传递,或者将它们存储在变量中。

def cube(number):
    return number * number * number

my_cube = cube  # Assigning function as an object
print(my_cube(5))

numbers = [21, my_cube(5), 12]  # Storing function in list
print(numbers)

# Returning function from another function
def display_numbers():
    return my_cube(5)

print(display_numbers())

如果函数包含其他函数作为参数,或者将函数作为输出返回,则称为高阶函数。

映射、筛选和减少是Python中内置的一些高级函数。

高阶函数-映射

Map函数有两个参数。第一个参数是一个函数,第二个参数是可迭代的。然后,它将传递的函数应用于迭代中的每个项。

num = [1, 2, 3, 4, 5]
# returns square of each element in the list.
square = list(map(lambda number: number ** 2, num))
print(square)

-------------------------------------------------------------------------------------------
OUTPUT:

[1, 4, 9, 16, 25]

高阶函数滤波器

滤波函数允许您根据所提供的条件轻松地从更大的数据集中提取匹配的记录。 这需要两个论点。第一个参数是一个函数,第二个参数是可迭代的。Filter函数从函数返回true的可迭代元素中返回序列。

num = [1, 2, 3, 4, 5]
# returns even numbers from list.
even = list(filter(lambda number: number % 2 == 0, num))
print(even)

-------------------------------------------------------------------------------------------
OUTPUT:

[2, 4]

高阶函数-约简

约简函数接受一个函数和一个序列,并返回一个值,其计算方式如下:

  1. 最初,使用序列中的前两项调用函数,并返回结果。
  2. 然后,使用步骤1中获得的结果和序列中的下一个值再次调用该函数。此过程将被重复,直到序列中的每个项被迭代。
from functools import reduce

def add(num1, num2):
    return num1 + num2

print(reduce(add, [1, 2, 3, 4]))

-------------------------------------------------------------------------------------------
OUTPUT:

10

函数式编程的优点

  • 纯函数总是产生相同的输出,并且没有影响最终结果的外部值。因此,程序更容易测试和调试。
  • 我们可以编写高效的并行或并发程序,因为它们独立运行而不改变状态。
  • 它支持懒惰评价,这意味着我们评估价值并只在需要时存储它们。
  • 与OOP不同,FP支持更好的封装和纯功能。
  • 由于FP程序是由纯函数组成的,所以我们可以很容易地重用它们。

函数式程序设计的缺点

  • 当结合递归时,不可变值可能会降低性能。
  • 在某些情况下,编写纯函数可能会降低代码的可读性。
  • 函数式编程有状态。他们总是创建新的对象来执行操作,而不是对现有的对象进行更改。因此,FP应用程序占用了大量内存。
  • 编写纯函数很容易,但是将它们合并到一个完整的应用程序中是很困难的。

结语

这个博客提供了一个一瞥什么函数式编程做,并应提供一些背景如何他们是有益的。Python允许我们以函数式、声明式的方式进行编码。它甚至支持很多常见的函数特性(Likelambda)、map()、filter()和Reach(),这些特性可以帮助您编写简洁、高级和可并行的代码。

相关推荐

阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?

TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...

高流量大并发Linux TCP性能调优_linux 高并发网络编程

其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...

性能测试100集(12)性能指标资源使用率

在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...

Linux 服务器常见的性能调优_linux高性能服务端编程

一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...

Nginx性能优化实战:手把手教你提升10倍性能!

关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...

高并发场景下,Spring Cloud Gateway如何抗住百万QPS?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...

Kubernetes 高并发处理实战(可落地案例 + 源码)

目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...

高并发场景下,Nginx如何扛住千万级请求?

Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...

Spring Boot+Vue全栈开发实战,中文版高清PDF资源

SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...

Docker-基础操作_docker基础实战教程二

一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...

你有空吗?跟我一起搭个服务器好不好?

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...

部署你自己的 SaaS_saas如何部署

部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...

Docker Compose_dockercompose安装

DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...

京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统

前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...

Kubernetes (k8s) 入门学习指南_k8s kubeproxy

Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...

取消回复欢迎 发表评论: