如何简化Python中预绑定函数参数的predef装饰器实现?
简化
predef装饰器的实现 你的需求本质是实现函数的部分应用——预先绑定参数,返回一个无需再传参即可调用的函数。原来的装饰器用了生成器和多层嵌套,确实有点冗余,这里有两种更简洁的实现方案:
方案1:利用标准库functools.partial(推荐)
Python标准库已经提供了专门处理这类场景的工具,直接用它来实现最简洁:
from functools import partial def predef(f): def decorator(*args, **kwargs): return partial(f, *args, **kwargs) return decorator
partial会帮我们把传入的参数绑定到原函数f上,返回一个新的函数。调用这个新函数时,就会用绑定好的参数执行原函数,完全符合你的需求。
测试你的示例代码:
@predef def foo(x): print(x) foos = foo("hello"), foo("world") for f in foos: f()
输出和预期一致:
hello world
方案2:手动实现无依赖版本
如果不想依赖标准库,也可以用更直白的嵌套函数实现,逻辑清晰易懂:
def predef(f): def decorator(*args, **kwargs): def wrapper(): return f(*args, **kwargs) return wrapper return decorator
这里decorator负责接收并保存要绑定的参数,返回的wrapper函数在被调用时,就会用之前保存的参数执行原函数f。
对比你原来的实现,这两种方案都去掉了不必要的生成器逻辑,代码更简洁,可读性也更强,完全满足你预先绑定参数、调用时无需传参的需求。
内容的提问来源于stack exchange,提问作者dodd0ro
相关产品推荐
相关产品推荐

