Python3标准库functools模块工具详解:partial类和函数修饰符
128 浏览量
更新于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函数可以用来缓存函数的结果,以便减少函数的调用次数。
136 浏览量
249 浏览量
269 浏览量
990 浏览量
130 浏览量
102 浏览量
146 浏览量
3783 浏览量
168 浏览量

weixin_38569722
- 粉丝: 1
最新资源
- Java制作的游戏之夜活动追踪工具
- 易语言实现的115网盘解析器源码解析
- UnityBeerPong:体验C#开发的啤酒乒乓游戏
- iOS CZHAlertView封装:类似UIAlertController的自定义弹出视图
- 易语言打造现代汉字查询工具
- 中国海洋大学2018操作系统A卷复习指南
- Pitt ECE 0302项目文件整理与存放
- mexLasso编译教程:在Matlab2013a环境下的详细指南
- ArcGIS 10.2.2 Server下载体验:无需资源分享
- 实现毛巾排序算法的JavaScript实践
- 利用UDP打洞技术实现内网通讯的软件工具
- 掌握iOS图片上翻效果的实现技巧
- ESPN FC比赛预测器扩展:团队选择分析
- 机器学习建模与性能优化大赛解析
- CEF 3.2357.1287 编译版本增加MP3/MP4支持
- DoroPDFWriter64位:高效的64位虚拟打印机软件