📅  最后修改于: 2023-12-03 15:04:05.202000             🧑  作者: Mango
functools
模块包含了一些高阶函数(higher-order functions)和工具函数,这些函数提供了一些额外功能的装饰器,以及用于将函数串起来的功能。在本篇文章中,我们将介绍此模块的几个功能。
偏函数是一个可以将函数的参数绑定到固定值的函数。在Python中,我们可以使用functools.partial()
函数创建偏函数。
import functools
def greeting(prefix, name):
return f"{prefix}, {name}!"
# 创建偏函数 greet_hello
greet_hello = functools.partial(greeting, prefix="Hello")
# 调用 greet_hello
print(greet_hello("Mike")) # Hello, Mike!
Python中的装饰器是使用函数包装另一个函数,以添加额外的功能。使用functools.wraps
装饰器,它会复制函数的名称和文档字符串,并可选地复制函数的模块和函数签名。
import functools
def debug(function):
@functools.wraps(function)
def wrapper(*args, **kwargs):
print(f"Function name: {function.__name__}")
print(f"Function args: {args}")
print(f"Function kwargs: {kwargs}")
return function(*args, **kwargs)
return wrapper
@debug
def calc(a, b):
return a + b
calc(1, 2)
# Output:
# Function name: calc
# Function args: (1, 2)
# Function kwargs: {}
# 3
Python中的functools.lru_cache()
可以用于缓存先前计算的函数结果并提高函数的性能。缓存的结果可以在后续的函数调用中被重复使用,而不需要重新计算。
import functools
@functools.lru_cache(maxsize=128)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # 55
functools.wraps
装饰器不仅可以用于装饰器,还可以用于函数的包装器。包装器可用于向现有函数添加功能。
import functools
def wrapper(func):
@functools.wraps(func)
def wrapped():
print("Before the function is called.")
func()
print("After the function is called.")
return wrapped
@wrapper
def say_hello():
print("Hello world!")
say_hello()
# Output:
# Before the function is called.
# Hello world!
# After the function is called.
以上是 functools
模块的一些高级使用技巧,这些功能能够帮助你构建更加健壮的Python程序,适用于从初学到高级开发者。