将生成器/模拟函数传递给遗留模块中的方法

Pass in a generator / mocking function to a method in a legacy module

在 Python 中,我有一个带有 legacy 方法的遗留模块 Utils,如下所示:

@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

我正在编写一个新逻辑,其中只有 userssome_data 存在,other_data 不存在。

我正在考虑传递一个 generator / 模拟方法,以便我可以这样做:

Utils.legacy(users, some_data, magic)

给定特定的 j 设置 {'b': magic[j]}

有没有办法使用生成器/一些模拟来实现 magic

备注:

你只需要一个 class 和一个 __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。)