在Python中,我有一个具有Utils
方法的旧版模块legacy
,如下所示:
@staticmethod
def legacy(users, some_data, other_data):
j=0
for _ in users.keys():
do_something([{'a': some_data[j], 'b': other_data[j]}])
j=j+1
我正在写一个新逻辑,其中仅users
和some_data
存在,而other_data
不存在。
我正在考虑传递一种generator /模拟方法,以便我可以这样做:
Utils.legacy(users, some_data, magic)
在给定特定的{'b': magic[j]}
的情况下设置j
。
有没有一种方法可以使用generator / mocking实现magic
?
注意:
dict
个用户规模来解决上述简化的问题,但我正在寻找更通用的解决方案。答案 0 :(得分:1)
您只需要一个带有__getitem__
方法的类,该方法不会对其参数施加任何约束。
class Foo(object):
def __getitem__(self, key):
pass
Utils.legacy(users, some_data, Foo())
将pass
用return foo
替换为您想要的占位符元素foo
。
或者,再三考虑,使用collections.defaultdict
。
from collections import defaultdict
Utils.legacy(users, some_data, defaultdict(lambda: None))
(或使用任何其他零参数函数来提供默认值来代替lambda: None
。)