Python functools模块学习总结
简介
functools
模块是Python标准库中的模块,提供了一些底层工具,用于高级函数的实现。这些工具可以方便地扩展和修改现有的函数或者实现新的高阶函数,使代码更加简洁易懂、高效、可读性更强。
常用函数
1. partial函数的使用
functools.partial
函数可以用来为一个函数创建一个新的、固定部分参数的新函数。它允许我们预先固定某些参数,并返回一个新的函数,然后这个新函数只需要传入剩余的参数即可。这个函数用于在某些场景下非常方便。
from functools import partial
def add(a, b):
return a + b
add_5 = partial(add, 5)
print(add_5(3)) # 8
在上面的代码中,我们使用functools.partial
函数把add
函数的一个参数设定为了常数5,这个设定是固定的,然后这个新的函数我们称之为add_5
,这个新函数只需要传入一个参数,使用add_5(3)
即可得到我们需要的结果。
2. wraps函数简化装饰器的编写
Python的装饰器在实现上有个问题,就是被装饰器装饰后的函数会失去它在源代码中的函数签名、调用栈等一系列重要的属性。但是这些属性可以用functools
模块中的wraps
函数来修复。
from functools import wraps
def counting_decorator(f):
@wraps(f)
def wrapped(*args, **kwargs):
wrapped.calls += 1
return f(*args, **kwargs)
wrapped.calls = 0
return wrapped
@counting_decorator
def print_hello():
print("Hello!")
print_hello()
print_hello()
print_hello()
print('number of calls:', print_hello.calls) # number of calls: 3
在上面的代码中,我们定义了一个counting_decorator
装饰器,它用来装饰函数print_hello
,wrapped
函数是print_hello
的包裹函数,每次调用print_hello
时,它的计数器calls
会加1。由于使用了wraps
函数,即使使用该装饰器修饰后的函数,它的元信息,仍然可以通过__name__
和__doc__
属性找回。
总结
以上是functools
模块的常用函数,我们可以灵活应用它们,提高我们代码实现的效率和可读性。
还有许多其他的functools
模块中的函数,可以帮助我们更好地应对不同的编程场景和需求,例如:cmp_to_key
、lru_cache
、total_ordering
等。访问Python官方文档可以查看更多详细的内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python functools模块学习总结 - Python技术站