#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:
Вы могли бы передать условное условие функции. Если это сложно, это разделит сложность и облегчит чтение каждой части, что в первую очередь является более или менее важным для функций.