- Python 基础
- Python - 首页
- Python - 概述
- Python - 历史
- Python - 特性
- Python vs C++
- Python - Hello World 程序
- Python - 应用领域
- Python - 解释器
- Python - 环境搭建
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 字面量
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 位运算符
- Python - 成员运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if else
- Python - 嵌套 if
- Python - Match-Case 语句
- Python - 循环
- Python - for 循环
- Python - for-else 循环
- Python - while 循环
- Python - break 语句
- Python - continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数 & 模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅关键字参数
- Python - 位置参数
- Python - 仅位置参数
- Python - 可变参数
- Python - 变量作用域
- Python - 函数注解
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 字符串切片
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表元素
- Python - 修改列表元素
- Python - 添加列表元素
- Python - 删除列表元素
- Python - 遍历列表
- Python - 列表推导式
- Python - 排序列表
- Python - 复制列表
- Python - 合并列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组
- Python - 访问元组元素
- Python - 更新元组
- Python - 解包元组
- Python - 遍历元组
- Python - 合并元组
- Python - 元组方法
- Python - 元组练习
- Python 集合
- Python - 集合
- Python - 访问集合元素
- Python - 添加集合元素
- Python - 删除集合元素
- Python - 遍历集合
- Python - 合并集合
- Python - 复制集合
- Python - 集合运算符
- Python - 集合方法
- Python - 集合练习
- Python 字典
- Python - 字典
- Python - 访问字典元素
- Python - 修改字典元素
- Python - 添加字典元素
- Python - 删除字典元素
- Python - 字典视图对象
- Python - 遍历字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组元素
- Python - 添加数组元素
- Python - 删除数组元素
- Python - 遍历数组
- Python - 复制数组
- Python - 反转数组
- Python - 排序数组
- Python - 合并数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python - OS 文件/目录方法
- Python - OS 路径方法
- 面向对象编程
- Python - OOPs 概念
- Python - 类 & 对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态
- Python - 方法重写
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误 & 异常
- Python - 语法错误
- Python - 异常
- Python - try-except 块
- Python - try-finally 块
- Python - 抛出异常
- Python - 异常链
- Python - 嵌套 try 块
- Python - 用户自定义异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 线程连接
- Python - 线程命名
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护线程
- Python - 线程同步
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络编程
- Python - 网络编程
- Python - Socket 编程
- Python - URL 处理
- Python - 泛型
- Python 库
- NumPy 教程
- Pandas 教程
- SciPy 教程
- Matplotlib 教程
- Django 教程
- OpenCV 教程
- Python 其他
- Python - 日期 & 时间
- Python - 数学
- Python - 迭代器
- Python - 生成器
- Python - 闭包
- Python - 装饰器
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式化
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送邮件
- Python - 扩展
- Python - 工具/实用程序
- Python - GUIs
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用元类进行元编程
- Python - 模拟和存根
- Python - 猴子补丁
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - Humanize 包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
- Python 有用资源
- Python - 问答
- Python - 在线测验
- Python - 快速指南
- Python - 参考
- Python - 速查表
- Python - 项目
- Python - 有用资源
- Python - 讨论
- Python 编译器
- NumPy 编译器
- Matplotlib 编译器
- SciPy 编译器
Python - 高阶函数
Python 中的高阶函数允许你操作函数,以提高代码的灵活性和可重用性。你可以使用嵌套作用域或可调用对象来创建高阶函数。
此外,functools 模块提供了用于处理高阶函数的实用程序,使创建装饰器和其他函数操作结构更加容易。本教程将探讨 Python 中高阶函数的概念,并演示如何创建它们。
什么是高阶函数?
高阶函数是一个函数,它要么接受一个或多个函数作为参数,要么返回一个函数作为结果。下面你可以观察 Python 中高阶函数的一些特性:
- 函数可以存储在变量中。
- 函数可以作为参数传递给另一个函数。
- 高阶函数可以以列表、哈希表等形式存储。
- 函数可以从函数中返回。
要在 Python 中创建高阶函数,可以使用嵌套作用域或可调用对象。下面我们将简要讨论它们。
使用嵌套作用域创建高阶函数
在 Python 中定义高阶函数的一种方法是使用嵌套作用域。这涉及在另一个函数中定义一个函数并返回内部函数。
示例
让我们观察以下在 Python 中创建高阶函数的示例。在这个例子中,`multiplier` 函数接受一个参数 a,并返回另一个函数 `multiply`,它计算 a * b 的值。
def multiplier(a): # Nested function with second number def multiply(b): # Multiplication of two numbers return a * b return multiply # Assigning nested multiply function to a variable multiply_second_number = multiplier(5) # Using variable as high order function Result = multiply_second_number(10) # Printing result print("Multiplication of Two numbers is: ", Result)
输出
执行上述程序后,你将得到以下结果:
Multiplication of Two numbers is: 50
使用可调用对象创建高阶函数
创建高阶函数的另一种方法是使用可调用对象。这涉及定义一个具有 `__call__` 方法的类。
示例
这是另一种使用可调用对象创建高阶函数的方法。
class Multiplier: def __init__(self, factor): self.factor = factor def __call__(self, x): return self.factor * x # Create an instance of the Multiplier class multiply_second_number = Multiplier(2) # Call the Multiplier object to computes factor * x Result = multiply_second_number(100) # Printing result print("Multiplication of Two numbers is: ", Result)
输出
执行上述程序后,你将得到以下结果:
Multiplication of Two numbers is: 200
使用 'functools' 模块的高阶函数
functools 模块提供作用于或返回其他函数的高阶函数。任何可调用对象都可以被视为此模块中的函数。
使用 wraps() 处理高阶函数
在这个例子中,`my_decorator` 是一个高阶函数,它使用 `functools.wraps()` 函数修改 `invite` 函数的行为。
import functools def my_decorator(f): @functools.wraps(f) def wrapper(*args, **kwargs): print("Calling", f.__name__) return f(*args, **kwargs) return wrapper @my_decorator def invite(name): print(f"Welcome to, {name}!") invite("Tutorialspoint")
输出
执行上述程序后,你将得到以下结果:
Calling invite Welcome to, Tutorialspoint!
使用 partial() 处理高阶函数
functools 模块的 `partial()` 函数用于创建一个可调用的“部分”对象。该对象本身的行为类似于函数。`partial()` 函数接收另一个函数作为参数,并冻结函数参数的一部分,从而产生一个具有简化签名的新的对象。
示例
在下面的例子中,一个用户自定义函数myfunction()作为参数传递给一个偏函数,通过设置原始函数的一个参数的默认值来实现。
import functools def myfunction(a,b): return a*b partfunction = functools.partial(myfunction,b = 10) print(partfunction(10))
输出
执行上述程序后,你将得到以下结果:
100
使用reduce()函数操作高阶函数
与上述方法类似,functools模块提供了reduce()函数,它接收两个参数:一个函数和一个可迭代对象。它返回一个单一的值。该函数参数会累积地应用于列表中的两个参数,从左到右。函数第一次调用的结果成为第一个参数,列表中的第三个项成为第二个参数。这个过程会重复,直到列表被遍历完。
示例
import functools def mult(x,y): return x*y # Define a number to calculate factorial n = 4 num = functools.reduce(mult, range(1, n+1)) print (f'Factorial of {n}: ',num)
输出
执行上述程序后,你将得到以下结果:
Factorial of 4: 24