Python3标准库functools模块工具详解:partial类和函数修饰符
36 浏览量
更新于2024-09-07
收藏 100KB PDF 举报
Python3标准库之functools管理函数的工具详解
Python3标准库中的functools模块提供了多种工具来调整或扩展函数和其他callable对象,从而不必完全重写。本文将详细介绍functools模块提供的主要工具partial类,并通过实例详解展示其使用方法。
1.functools管理函数的工具
functools模块提供了一些工具来调整或扩展函数和其他callable对象,从而不必完全重写。这些工具包括partial类、lru_cache函数、reduce函数、total_ordering函数等。
1.1 修饰符
functools模块提供的主要工具就是partial类,可以用来“包装”一个有默认参数的callable对象。得到的对象本身就是callable,可以把它看作是原来的函数。它与原函数的参数完全相同,调用时还可以提供额外的位置或命名函数。可以使用partial而不是lambda为函数提供默认参数,有些参数可以不指定。
1.1.1 部分对象
partial对象是functools模块提供的主要工具之一,可以用来“包装”一个有默认参数的callable对象。 partial对象具有func、args和keywords三个属性。func属性是原函数,args属性是位置参数,keywords属性是命名参数。
例如,假设我们有一个函数myfunc(a, b=2),可以使用partial来创建一个部分对象p1,p1的默认参数b=4。
```
import functools
def myfunc(a, b=2):
"Docstring for myfunc()."
print('called myfunc with:', (a, b))
def show_details(name, f, is_partial=False):
"Show details of a callable object."
print('{}:'.format(name))
print('object:', f)
if not is_partial:
print('__name__:', f.__name__)
if is_partial:
print('func:', f.func)
print('args:', f.args)
print('keywords:', f.keywords)
return
show_details('myfunc', myfunc)
myfunc('a', 3)
print()
# Set a different default value for 'b', but require
# the caller to provide 'a'.
p1 = functools.partial(myfunc, b=4)
show_details('p1', p1)
```
在上面的示例中,我们首先定义了一个函数myfunc(a, b=2),然后使用partial来创建一个部分对象p1,p1的默认参数b=4。最后,我们使用show_details函数来展示partial对象的详细信息。
1.2 lru_cache函数
functools模块还提供了lru_cache函数,可以用来缓存函数的结果,从而减少函数的调用次数。lru_cache函数可以缓存函数的结果,以便在下一次调用时可以直接返回缓存的结果,而不需要重新计算。
例如,假设我们有一个函数fibonacci(n),可以使用lru_cache函数来缓存其结果。
```
import functools
@functools.lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # 输出55
```
在上面的示例中,我们使用lru_cache函数来缓存fibonacci函数的结果,以便在下一次调用时可以直接返回缓存的结果,而不需要重新计算。
functools模块提供了多种工具来调整或扩展函数和其他callable对象,从而不必完全重写。partial类可以用来“包装”一个有默认参数的callable对象,而lru_cache函数可以用来缓存函数的结果,以便减少函数的调用次数。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-18 上传
2011-09-10 上传
2022-01-12 上传
2021-12-25 上传
2020-09-19 上传
2020-09-22 上传
weixin_38569722
- 粉丝: 1
- 资源: 924
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析