当前位置: 首页 > article >正文

一文掌握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

相关文章:

  • 【超级详细】七牛云配置阿里云域名详细过程记录
  • Nmon(Nigel‘s Performance Monitor)
  • 设计模式-创建型-工厂方法模式
  • 【游戏设计原理】31 - 头脑风暴的方法
  • FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
  • 小程序基础 —— 07 创建小程序项目
  • RPC 和 序列化
  • 05 龙芯平台openstack部署搭建-placement部署
  • 【系统架构师】-第19章-大数据架构设计理论与实践
  • STP环路避免实验(思科)
  • 代码随想录day20(2)二叉树:完全二叉树节点个数(leetcode222)
  • 创建存储过程,与存储过程调用
  • mysql通过binlog恢复数据示例
  • Spring启动“--”设置参数没生效
  • 想要通过湖北建筑安全员ABC考试?这5个技巧助你一臂之力!
  • linux环境部署
  • RSA加密解密签名加签验签RsaUtils工具类
  • 106 基于消息队列来做 mysql 大数据表数据的遍历处理
  • 尚硅谷SpringBoot3笔记 (二) Web开发
  • 写了几个难一点的sql
  • php便民超市管理系统flask-django-nodejs-python
  • cc-uploadSomePic图片上传组件:快速开发与用户体验的提升
  • 计算机网络——物理层(物理传输介质和物理层的设备)
  • 阿里云部署MySQL、Redis、RocketMQ、Nacos集群
  • 使用IDEA2023创建传统的JavaWeb项目并运行与调试
  • openGauss学习笔记-246 openGauss性能调优-SQL调优-经验总结:SQL语句改写规则