一文掌握python函数式编程及应用实例(超详细及超多应用实例)(一)

函数式编程(Functional Programming)是一种强大的编程范式,它强调程序执行的计算逻辑通过“函数”进行描述,而非基于指令或者对状态变化的改变。这种编程风格提倡将计算视为数学函数的应用,并且充分利用了高阶函数、闭包、匿名函数(Lambda表达式)、纯函数等概念,使得代码更为简洁、易于理解和测试。

一.基本定义

  • 1)无参数、无返回值的函数:
def my_function():
    # 执行一些操作
    pass
  • 2)带参数、无返回值的函数:
    def greet(name):
        print(f"Hello, {name}!")
    
    
    name = greet('JACK')  # print打印出Hello, JACK!
    print(name)  # 函数本身没有return, 打印出None
  • 3)带参数、有返回值的函数:
def add_numbers(a, b):
    result = a + b
    return result

num = add_numbers(1, 2)
print(num)  # 3

二.默认参数值

  • 可以给函数参数设置默认值,使得调用时可以省略这些参数:
def power(base, exponent=2):
    return base ** exponent


print(power(2))  # 4

print(power(2, 3))  # 8

三.可变数量参数

  • 1)使用星号 * 收集位置参数为元组:
    例1:
    def func(*args):
        for i in args:
            print(i)
    
    func(1, 2, 3)  
    # 输出:1 2 3
    
    
    例2:
    func(1, (2, 3))  
    # 输出:1 (2, 3)
    
    
    例3:
    def sum_all(*args):
        total = 0
        for arg in args:
            total += arg
        return total
    
    print(sum_all(1, 2, 3))  
    # 输出:6
    
    
    例4:
    # 带有关键字参数
    def func(a=1, *args):
        print(f'a: {a}')
        for i in args:
            print(i)
    
    func(1, 2, 3)  
    # 输出: a: 1, 2, 3
    
    
    例5:
    # 使用解包传参
    def func(*args):
        for i in args:
            print(i)
    
    func(*(1, 2, 3))  # *这里代表解包, 
    
    # 输出:1 2 3
    
    
    例6:
    星号(*)运算符用于收集剩余元素
    def func(a, b, *args):
        print(a, b, args)
    
    func(1, 2, 3, 4, 5)  
    # 输出:1 2 (3, 4, 5)
    
  • 2)使用双星号 ** 收集关键字参数为字典:
例1:
def func(**kwargs):
    print(kwargs)

# 调用函数并传入多个关键字参数
func(name='Alice', age=30, job='Engineer')

# 输出:
# {'name': 'Alice', 'age': 30, 'job': 'Engineer'}


例2:
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
# 参数是位置参数, key必须和参数一致
def func(name, age, job):
    print(f"Name: {name}, Age: {age}, Job: {job}")

# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(**data)

# 输出:
# Name: Bob, Age: 40, Job: Manager


例3:
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
# 参数是关键字参数, key必须和参数一致
def func(name=1, age=2, job=3):
    print(f"Name: {name}, Age: {age}, Job: {job}")

# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(**data)

# 输出:
# Name: Bob, Age: 40, Job: Manager


例4:
同时有位置参数和关键字可变参数

data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}

def func(a, **kwargs):
    print(a)
    print(kwargs)
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(1, **data)

# 输出:
# 1
# {'name': 'Bob', 'age': 40, 'job': 'Manager'}


例5:
同时有关键字参数和关键字可变参数

data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}

def func(a=1, **kwargs):
    print(a)
    print(kwargs)
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(1, **data)

# 输出:
# 1
# {'name': 'Bob', 'age': 40, 'job': 'Manager'}

例6:
同时有关键字参数,可变参数,可变关键字参数

args = [3, 4, 5]
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}

def func(a=1, *args, **kwargs):
    print(a)
    print(args)
    print(kwargs)
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(1, *args, **data)

# 输出:
1
(3, 4, 5)
{'name': 'Bob', 'age': 40, 'job': 'Manager'}

四.组合使用

同时使用位置参数、默认参数、可变数量参数以及关键字参数:

在指定关键字-only参数时,需要遵循特定的顺序规则:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RPC 和 序列化

RPC 1 RPC调用流程 1.1 clerk客户端调用远程服务 Clerk::PutAppend() raftServerRpcUtil::PutAppend() raftServerRpcUtil是client与kvserver通信的入口, 包含kvserver功能的一对一映射:Get/PutAppend,通过stub对象——raftKVRpcProctoc:…

【系统架构师】-第19章-大数据架构设计理论与实践

四个特点: 大规模(Volume)、高速度(Velocity)和多样化(Variety),价值(Value)。 五个问题: 异构性(Heterogeneity)、规模…

STP环路避免实验(思科)

华为设备参考:STP环路避免实验(华为) 一,技术简介 Spanning Tree Protocol(STP),即生成树协议,是一种数据链路层协议。主要作用是防止二层环路,并自适应网络变化和故障…

代码随想录day20(2)二叉树:完全二叉树节点个数(leetcode222)

题目要求:求一个完全二叉树的节点个数 思路:首先完全二叉树可以用普通二叉树的方法来求,但是需要遍历所有的节点。 但是对于完全二叉树来说,只有最底层右侧的节点可能没满,其余每层节点都达到了最大值。所以我们可以…

Spring启动“--”设置参数没生效

现象 在idea中启动SpringBoot项目时,使用“--”设置的启动参数没有生效,如修改端口号“--server.port8082” 原因 排查发现是因为在使用SpringApplication.run启动项目时,没有将args参数传入run方法。 修复方案 SpringApplication.run参数中…

想要通过湖北建筑安全员ABC考试?这5个技巧助你一臂之力!

想要通过湖北建筑安全员ABC考试?这5个技巧助你一臂之力! 2024年湖北建筑安全员ABC报名考试通过率 关于湖北省建筑安管人员考核管理系统考核通过率不是很固定,或高或低。安全员ABC测试有合格分数线,交卷后30分钟即可查询你的成绩…

RSA加密解密签名加签验签RsaUtils工具类

RSA加密解密RsaUtils工具类题 引言一、RsaUtils工具类代码二、优点三、缺点四、声明 引言 RSA算法基于大数因子分解难题,提供了公钥加密和私钥解密的能力。公钥用于加密,私钥则负责解密。这种特性使得RSA成为保证数据传输安全的理想选择。 公钥加密私钥…

106 基于消息队列来做 mysql 大数据表数据的遍历处理

前言 最近有这样的一个需求, 我们存在一张 很大的 mysql 数据表, 数据量大概是在 六百万左右 然后 需要获取所有的记录, 将数据传输到 es 中 然后 当时 我就写了一个脚本来读取 这张大表, 然后 分页获取数据, 然后 按页进行数据处理 转换到 es 但是存在的问题是, 前面 还…

尚硅谷SpringBoot3笔记 (二) Web开发

Spring Boot Web开发&#xff1a;24.Web开发-自动配置原理_哔哩哔哩_bilibili 1. Web场景 1.1 自动配置 整合web场景&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId&g…

php便民超市管理系统flask-django-nodejs-python

随着时代的变迁&#xff0c;超市管理系统软件使用的普及【1】&#xff0c;以上所有的问题&#xff0c;都是为它而打造的&#xff0c;现在不仅是开一家店容易管理&#xff0c;开多家店页变得容易很多&#xff0c;同时它的出现也可以为本店起到宣传的作用。 21世纪的今天&#…

cc-uploadSomePic图片上传组件:快速开发与用户体验的提升

cc-uploadSomePic图片上传组件&#xff1a;快速开发与用户体验的提升 摘要&#xff1a; 在前端开发中&#xff0c;图片上传功能是一个常见的需求。为了提高开发效率和用户体验&#xff0c;我们开发了一个名为cc-uploadSomePic的图片上传组件。该组件支持单个或多个文件上传&am…

计算机网络——物理层(物理传输介质和物理层的设备)

计算机网络——物理层&#xff08;物理传输介质和物理层的设备 物理传输介质导向性传输介质双绞线同轴电缆光纤 非导向性传输介质无线电波多径效应 微波地面微波通信ISM 频段 卫星通信 物理层设备中继器集线器中继器和集线器的区别 我们今天进入物理层的物理传输介质和物理层的…

阿里云部署MySQL、Redis、RocketMQ、Nacos集群

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能&#xff08;ESSD&#xff09; 镜像选择带宽选择密码配置注意事项 搭建宝塔面板方便管理云服务器云服务器的安全组安装docker和docker-compose…

使用IDEA2023创建传统的JavaWeb项目并运行与调试

日期:2024-0312 作者:dusuanyun 文档环境说明: OS:Deepin 20.9(Linux) JDK: OpenJDK21 Tomcat:10.1.19 IDEA: 2023.3.4 (Ultimate Edition) 本文档默认已经安装JDK及环境变量的配置。 关键词…

openGauss学习笔记-246 openGauss性能调优-SQL调优-经验总结:SQL语句改写规则

文章目录 openGauss学习笔记-246 openGauss性能调优-SQL调优-经验总结&#xff1a;SQL语句改写规则246.1 使用union all代替union246.2 join列增加非空过滤条件246.3 not in转not exists246.4 选择hashagg246.5 尝试将函数替换为case语句246.6 避免对索引使用函数或表达式运算2…

2024热门外贸独立站wordpress模板

工艺品wordpress外贸主题 简约大气的wordpress外贸主题&#xff0c;适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377 日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题&#xff0c;适合做日用百货的外贸公司搭建跨境电商网站使用。 …

BUGKU-WEB never_give_up

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 F12查看请求和响应&#xff0c;查找线索 相关工具 base64解码URL解码Burp Suit抓包 解题步骤 F12查看请求和响应&#xff0c;发现一行注释包含一个文件名称【1p.html】&#xff0c;这应该就是提…

flex属性详解

flex布局&#xff0c;父元素属性可参考&#xff1a;flex布局 &#xff0c;本文主要介绍flex添加到子元素的属性。 <div class"father"><div class"left"></div><div class"middle"></div><div class"midd…

HTTPS(超文本传输安全协议)工作过程

一、简述HTTPS HTTPS超文本传输协议&#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&#x…

SNMP协议入门:揭秘网络管理的核心技术

背景 随着数字化、网络化的深入发展&#xff0c;在现代数据中心机房供配电系统中&#xff0c;有越来越多的产品需要通过标准的SNMP协议接入到以太网络&#xff0c;将诸如UPS&#xff08;不间断电源&#xff09;、空调、油机、配电柜及机柜PDU这些设备能够被NMS&#xff08;网络…
最新文章