Python Functools&Itertools:7个智能代码的超级方便工具

想要更智能编码,不是更难吗?从Python的函数和Itertools开始使用这7个实用程序,这些实用程序有用,实用和优雅!

来源:KDnuggets
作者的图像|意识形态图

Python的标准库有多个实用程序,可以将您的代码从笨拙和冗长转换为优雅而高效。其中,功能和迭代模块通常非常方便地完成非平凡的任务。

今天,我们将从这些模块中查看七个基本工具(功能和装饰器),这些模块将使您的Python代码更好。

让我们开始。

🔗链接github上的代码

链接到GitHub上的代码

1。functools.lru_cache

functools.lru_cache

您可以使用@lru_cache装饰器来缓存功能结果,并避免重复昂贵的操作。

@lru_cache

这是一个例子:

来自功能引起

@lru_cache(maxsize = 128)
def fetch_user_data(user_id):
    #昂贵的数据库调用
    返回database.get_user(user_id)

#第一个呼叫命中数据库,随后的呼叫使用缓存
用户= fetch_user_data(123)#数据库调用
用户= fetch_user_data(123)#返回缓存结果

其工作原理:@lru_cache Decorator存储会导致内存。当再次调用fetch_user_data(123)时,它将返回缓存结果,而不是击中数据库。 MaxSize = 128保持了128个最新结果。

fetch_user_data(123) maxsize = 128

2。itertools.chain

itertools.chain

要处理多个迭代作为一个连续流,您可以从itertools模块中使用chain.from_iterable()。

链。from_iterable()

让我们以一个例子:

来自Itertools进口链

#处理多个日志文件作为一个流
error_logs = ['app.log','db.log','api.log']
all_lines = chain.from_iterable(错误_logs中的f开放(f))

error_count = sum(如果在行中'错误',则为all_lines中的行1)
它的工作原理:chain.from_iterable()采用多个迭代,并创建一个连续的流。它一次读一行。 
 3。
 functools.partial 
部分
以下是部分功能的示例:
 auth_error 
 log_event 
 4。itertools.combinations 
 itertools.combinations 
组合
考虑以下示例:
组合(功能,2)
 5。functools.singledispatch 
 @singledispatch

来自Itertools进口链 #处理多个日志文件作为一个流 error_logs = ['app.log','db.log','api.log'] all_lines = chain.from_iterable(错误_logs中的f开放(f)) error_count = sum(如果在行中'错误',则为all_lines中的行1)

它的工作原理:chain.from_iterable()采用多个迭代,并创建一个连续的流。它一次读一行。

3。 functools.partial

部分

以下是部分功能的示例: auth_error

log_event

4。itertools.combinations itertools.combinations

组合

考虑以下示例:

组合(功能,2)

5。functools.singledispatch@singledispatch