Вызов не чистой функции в понимании списка - PullRequest
0 голосов
/ 18 октября 2018

У меня есть следующий код (упрощенно):

def send_issue(issue):
    message = bot.send_issue(issue)
    return message

def send_issues(issues):
    return [send_issue(issue) for issue in issues]

Как видите, send_issues и send_issue - это не чистые функции.Считается ли это хорошей практикой (и Pythonic) для вызова не чистых функций в списках?Я хочу сделать это потому, что это удобно.Причина в том, что когда вы видите понимание списка, вы ожидаете, что этот код просто генерирует список и ничего более, но это не так.

UPD: я действительно хочу создать и вернуть список наоборот.это вопрос .

1 Ответ

0 голосов
/ 18 октября 2018

Вопрос здесь - вам действительно нужно создать список?

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

Лучше записать это как.

msgs = [bot.get_message(issue) for issue in issues]
for msg in msgs:
     bot.send(msg)

Это более понятно и расширяет использование API, сохраняя побочный эффект изолированным.

Если вы не хотите создавать другую функцию, вы можете, по крайней мере, использовать map, так как она говорит - «сопоставьте эту функцию каждому элементу».

map(lambda issue: bot.send_issue(issue), issues) # returns a list

Кроме того, функцияsend_issue не нужен, потому что он просто оборачивает bot.send_issue.Добавление таких функций только делает код шумящим, что не очень хорошая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...