W Pythonie mam dziedzictwo modułu Utils metodą legacy, taką:

@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

Piszę nową logikę, gdzie istnieje tylko users i some_data i other_data nie istnieje.

Zastanawiam się nad przekazaniem w generatorze / metodzie prześmiewczej, abym mógł zrobić:

Utils.legacy(users, some_data, magic)

Które ustawia {'b': magic[j]}, biorąc pod uwagę określony {x1}}.

Czy istnieje sposób na wdrożenie magic przy użyciu generatora / niektórych szyjki?

Uwagi:

  • Nie można zmienić właściwego kodu
  • Powyższe uproszczone pytanie można rozwiązać, przechodząc w wielkości użytkowników dict, ale szukam bardziej ogólnego rozwiązania.
0
XoXo 15 listopad 2018, 23:41

1 odpowiedź

Najlepsza odpowiedź

Wystarczy potrzebować klasy z metodą {X0}}, która nie wprowadza żadnych ograniczeń na jego argument.

class Foo(object):
    def __getitem__(self, key):
        pass


Utils.legacy(users, some_data, Foo())

Wymień pass za pomocą return foo dla dowolnego elementu symbolicznego {x2}} chcesz.

Lub, na drugiej myśli użyj collections.defaultdict.

from collections import defaultdict

Utils.legacy(users, some_data, defaultdict(lambda: None))

(Lub użyj dowolnej innej funkcji zerowej argumentu, aby zapewnić domyślną wartość zamiast lambda: None.)

1
chepner 15 listopad 2018, 23:56