博客
关于我
python基础之---函数式编程
阅读量:796 次
发布时间:2023-03-07

本文共 2028 字,大约阅读时间需要 6 分钟。

Python基础之—函数式编程

一,函数式编程

函数式编程是一种以函数为中心的编程范式,强调通过将逻辑高度抽象化和参数化,使代码更加灵活可复用。

1、函数作为参数

将核心逻辑嵌入方法体,使其适用性更广。函数既可以作为形参传入参数列表,也可以作为回调函数使用。

回调函数示例
def add(x, y):
return x + y
def sub(x, y):
return x - y
def mul(x, y):
return x * y
def div(x, y):
return x / y
x = 100
y = 200
print(add(x, y)) # 输出:300
def calc(x, y, func):
return func(x, y)
calc(x, y, add) # 传入add作为回调函数
工具函数示例
def find_odd(lst, fn):
for i in lst:
if i % 2 == 1:
fn(i)
回调函数应用场景
  • 在业务逻辑中,需要灵活扩展功能时,可以通过回调函数传递处理逻辑。

2、函数作为返回值

通过闭包思想,可以将函数返回值中的逻辑封装起来,实现灵活的函数调用。

闭包定义

闭包必须满足以下条件:

  • 有内嵌函数
  • 内嵌函数引用外部函数的变量
  • 外部函数返回内嵌函数
  • 闭包优缺点
    • 优点

      • 逻辑连贯,避免单独编写额外逻辑
      • 方便调用上下文的局部变量
      • 加强封装性
    • 缺点

      • 闭包引用的空间不灭,可能导致内存泄漏
    闭包案例分析
    def fun(n=None, o=None):
    print(o)
    return {"fun": lambda m: fun(m, n)}
    a = fun(0)
    print(type(a)) # 输出:
    a["fun"](1)
    a["fun"](2)
    a["fun"](3)
    闭包的实际应用
    • 通过闭包可以灵活地将函数逻辑传递给外部调用者,同时保持内部逻辑的完整性。

    3、装饰器

    装饰器是Python对闭包思想的具体实现,用于在不破坏目标函数原有功能的前提下,为函数增加新功能。

    装饰器本质
    • 装饰器是一个函数,它接受被装饰函数作为参数。
    • 装饰器将被装饰函数封装到内部闭包中。
    • 调用装饰器实际上是在调用内部闭包。
    装饰器应用场景
    • 日志记录
    • 认证和授权
    • 缓存
    • 参数验证
    • 代码注入
    基本装饰器示例
    def decorator1(fun):
    def wrapper(*args, **kwargs):
    print("wrapper")
    return fun(*args, **kwargs)
    print("继续装饰")
    return wrapper
    @decorator1
    def fn():
    print("业务打印")
    fn()
    带参数的装饰器示例
    def decorator2(num):
    def decorator(cb):
    def block():
    print("装饰函数的代码")
    for _ in range(num):
    cb()
    return block
    return decorator
    @decorator2(2)
    def fn():
    print("hello")
    fn()
    装饰器链示例
    def decorator1(cb):
    def block():
    print("block1")
    cb()
    return block
    def decorator2(cb):
    def block():
    print("block2")
    cb()
    return block
    @decorator1
    @decorator2
    def f3():
    print("f3")
    f3()
    装饰器的实际应用
    • 日志打印装饰器
    def log(fun):
    def wrapper(*args, **kwargs):
    print("开始打印日志")
    fun(*args, **kwargs)
    print("结束打印日志")
    return wrapper
    def diaoyong(a, b):
    print(a * b)
    diaoyong(1, 2)

    通过以上内容,可以看出函数式编程在Python中通过回调和闭包技术实现了高度的灵活性和可扩展性,而装饰器则为函数的功能增强提供了一种简洁的解决方案。

    转载地址:http://roofk.baihongyu.com/

    你可能感兴趣的文章
    Python基础【os】
    查看>>
    Python基础——面向对象
    查看>>
    Python基础——线程锁
    查看>>
    python基础——线程与进程
    查看>>
    Python基础——构造方法和特殊成员方法
    查看>>
    Python基础——多线程值从Thread类继承
    查看>>
    Python基础——多线程之信号量
    查看>>
    Python基础——_thread多线程
    查看>>
    Python基础——Thread类与线程对象
    查看>>
    Python基础——Thread创建管理多线程
    查看>>
    Python基础——SQLite数据库基本操作
    查看>>
    Python基础——MySQL数据库基本操作
    查看>>
    Python基础_列表 list
    查看>>
    python系列【仅供参考】:python异步库调用gevent和asyncio对比
    查看>>
    python基础3
    查看>>
    Python基础08 面向对象的基本概念
    查看>>
    python系列【仅供参考】:python二进制转10进制
    查看>>
    Python基础-函数篇
    查看>>
    python基础---->常用模块
    查看>>
    Python基础(2):控制结构
    查看>>