Мульти-аргументы python карта - PullRequest
1 голос
/ 22 января 2020

У меня есть такой сценарий: у меня есть метод some_method (x, y), который принимает два аргумента. Первый аргумент - это список temp_list, а второй аргумент - это список словарей list_of_dict.

У меня есть следующее:

  def outer_method(self, list_of_dict):
    temp_list = []
    for x in list_of_dict:
      self.some_method(temp_list, x)
    return temp_list

Но я хочу знать, как я могу используйте функцию карты python, чтобы код выглядел более утонченным.

1 Ответ

3 голосов
/ 29 января 2020

Поскольку some_method работает с побочными эффектами (то есть изменяет входные данные temp_list), вы не должны использовать map для этого; ваш for l oop - разумный способ написать этот код. map не следует использовать для побочных эффектов, а использование функций более высокого порядка не означает автоматически, что ваш код лучше.

Тем не менее, если some_method работает, добавляя некоторые элементы к temp_list и не изменяет остальное его содержимое, вы можете выполнить рефакторинг так, чтобы some_method давал эти элементы вместо добавления их. Тогда outer_method может быть реализован следующим образом:

    def outer_method(self, list_of_dict):
        return list(chain.from_iterable(map(self.some_method, list_of_dict)))

Где some_method принимает в качестве аргумента один словарь, а chain импортируется из модуля itertools.

...