Преобразование функции в список-Понимание

#python #function #list-comprehension

#python #функция #список-понимание

Вопрос:

В моем коде есть несколько строк, которые очень похожи на

 [this.Attribute for this in THAT if something]
  

Есть ли способ создать функцию, которая возвращала бы это более коротким способом? Потому что их создание становится очень утомительным, и я не нахожу их настолько удобочитаемыми, особенно если слишком много «if-условий».

Редактировать:

Ну, я часто трачу время, пытаясь получить что-то из большого списка, отвечающее определенным критериям. И мне часто нужно менять критерии и выходные данные. Вот так:

 [obj for obj in Object.ALLOBJECTS if obj.pos == (x,y)]

[creature.pos for creature in Creature.ALLCREATURES if creature is not caller]

[creature for creature in Creature.ALLCREATURES if creature.pos == pos and creature is not caller]
  

И так далее.

Может быть, я с самого начала делаю что-то не так.

Комментарии:

1. Можете ли вы вставить больше кода, чтобы сделать ваш вопрос более понятным?

2. Существует множество потенциальных решений (включающих некоторую комбинацию itertools.ifilter , itertools.imap , operator.attrgetter , встроенных функций all и any ), но без более конкретного вопроса трудно предложить хорошее решение. То, что вы опубликовали, на самом деле довольно ясно. Перенос чего-то такого простого в функцию просто добавляет накладные расходы на вызов функции, не добавляя особой ясности, IMO.

Ответ №1:

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