如何在不调用的情况下传递带多参数的Python函数并绑定参数?
Python:固定函数参数后作为参数传递
问题场景
现有如下函数,需要将它作为参数传入ColumnDef类:
def get_service_enums(context, enum): svc = Service(context) return svc.get_enum(enum)
期望写法为ColumnDef(enum_values=my_func),其中my_func是固定了第二个enum参数的get_service_enums,要求不能通过加括号的方式直接调用get_service_enums。
解决方案
1. 使用functools.partial(推荐)
functools.partial可以固定函数的部分参数,返回一个新的可调用对象,完美匹配需求:
from functools import partial # 把enum参数固定为你需要的值,比如"user_type" my_func = partial(get_service_enums, enum="user_type") # 直接传递给ColumnDef ColumnDef(enum_values=my_func)
当ColumnDef内部调用enum_values(context)时,等同于执行get_service_enums(context, enum="user_type")。
2. 使用lambda表达式
用lambda创建匿名函数,仅接收context参数,内部调用原函数并传入固定的enum值:
# 固定enum为"user_type" my_func = lambda context: get_service_enums(context, enum="user_type") ColumnDef(enum_values=my_func)
这种写法更直白,但如果需要固定多个参数或复用包装后的函数,partial的扩展性更好。
3. 手动编写包装函数
如果不想依赖标准库或lambda,也可以自定义包装函数:
def wrap_get_enums(context): # 在这里指定固定的enum参数值 return get_service_enums(context, enum="user_type") ColumnDef(enum_values=wrap_get_enums)
内容的提问来源于stack exchange,提问作者Victor Cui
相关产品推荐
相关产品推荐

