{site_name}

{site_name}

🌜 搜索

Python functools模块是一个标准库模块,提供了一些处理高阶函数(h

Python 𝄐 0
python 高阶函数定义,python的高级函数,python各种函数的调用,python入门之函数调用第三关,python中的高阶函数,python中常用的两个高阶函数
Python functools模块是一个标准库模块,提供了一些处理高阶函数(higher-order functions)和可调用对象(callable objects)的工具函数。

高阶函数是指接受其他函数作为参数、或者返回一个函数作为结果的函数。Python的内置函数map()、filter()和reduce()就是高阶函数。functools模块提供了一些工具函数来处理这类函数,例如:

- partial(func, *args, **keywords):将给定函数func的部分参数固定下来,返回一个新的函数,后续调用这个新函数只需要提供剩下的参数即可。示例:

python
from functools import partial

# 定义一个简单的函数
def power(x, n):
return x ** n

# 固定 x=2,生成一个新的函数 square,计算平方
square = partial(power, 2)
print(square(3)) # 输出 9,等价于 power(2, 3)

# 固定 n=3,生成一个新的函数 cube,计算立方
cube = partial(power, n=3)
print(cube(2)) # 输出 8,等价于 power(2, 3)


- reduce(function, iterable[, initializer]):对可迭代对象 iterable 中的元素依次执行 function,返回一个累积的结果。如果指定了 initializer,则第一次调用 function 时使用 initializer 和 iterable 的第一个元素作为参数。示例:

python
from functools import reduce

# 计算阶乘
factorial = lambda n: reduce(lambda a, b: a * b, range(1, n+1))
print(factorial(5)) # 输出 120,等价于 1*2*3*4*5


可调用对象是指可以像函数一样被调用的对象。除了普通的函数以外,Python还支持类实例对象、类方法、静态方法等可调用对象。functools模块提供了一些工具函数来处理这类对象,例如:

- partialmethod(func, *args, **keywords):类似于partial(),但是它用于把方法绑定到类上,返回一个新的方法对象。示例:

python
from functools import partialmethod

# 定义一个简单的类
class Greeter:
def __init__(self, greeting):
self.greeting = greeting

# 普通的实例方法
def greet(self, name):
return f"{self.greeting}, {name}!"

# 绑定了默认参数的方法
say_hello = partialmethod(greet, "Hello")

g = Greeter("Hi")
print(g.greet("Alice")) # 输出 "Hi, Alice!"
print(g.say_hello("Bob")) # 输出 "Hello, Bob!"


- wraps(wrapped[, assigned][, updated]):用于包装一个函数,使其接口和文档字符串与原函数保持一致。在写装饰器时,如果没有使用wraps函数,则原函数的元信息(比如函数名、文档字符串、参数列表等)会被覆盖。示例:

python
from functools import wraps

def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Before function is called.")
result = func(*args, **kwargs)
print("After function is called.")
return result
return wrapper

@my_decorator
def add(a, b):
"""Add two numbers."""
return a + b

print(add(1, 2)) # 输出 3
print(add.__name__) # 输出 "add"
print(add.__doc__) # 输出 "Add two numbers."