如何以最Pythonic的方式为Django测试快捷函数传递kwargs?
解决方案:Pythonic的单行封装方式
当然有啦!针对你想避免重复编写new_q(timedelta(minutes=1))这类代码的需求,这里有几个非常优雅的单行解决方案,完全符合Pythonic风格,而且不需要先把kwargs存入变量:
方法1:用functools.partial封装(推荐)
partial是Python标准库中专门用来固定函数参数的工具,可读性和复用性都很强:
from functools import partial from datetime import timedelta # 只需要定义一次固定的timedelta参数,之后直接调用封装后的函数即可 new_q_recent = partial(new_q, timedelta(minutes=1)) # 调用的时候直接用: new_q_recent()
这种方式的好处是清晰直观,如果你之后需要修改timedelta的参数(比如改成minutes=5),只需要修改一处即可。
方法2:用lambda表达式快速封装
如果场景比较简单,用lambda可以写出更简洁的单行代码:
from datetime import timedelta # 同样只定义一次参数 new_q_recent = lambda: new_q(timedelta(minutes=1)) # 调用时直接执行: new_q_recent()
这种写法更紧凑,适合简单的一次性封装需求。
额外小技巧:如果new_q支持直接接收timedelta的kwargs?
如果你的new_q函数本身可以接受**kwargs并内部创建timedelta对象,那还能更简化:
# 假设new_q定义成这样: def new_q(**delta_kwargs): delta = timedelta(**delta_kwargs) # 后续创建Question对象的逻辑... # 那你可以直接定义一个封装函数: new_q_recent = lambda: new_q(minutes=1)
不过这需要你调整new_q的实现,如果你不想修改原函数的话,前面两种方法更合适。
内容的提问来源于stack exchange,提问作者ladybug
相关产品推荐
相关产品推荐

