Goshujin
@Goshujin
Я только начал изучать Python, не бейте.

Как получить контекст команды без передачи его в параметры?

Есть функция отправки ответа:
async def Reply(ctx, text):
    toSend = f"{ctx.author.mention} {text}"
    await ctx.send(toSend)

Которая может использоваться после завершения какой-либо команды с выводом какого-нибудь сообщения:
@client.command()
async def test(ctx, text):
    ...
    await Reply(ctx, text)

Так вот, можно-ли каким-нибудь образом вызвать Reply() без передачи ctx в качестве параметра?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest
Работаю с Python/Django
Ну, в теории можно (например, через global), но без очень сильной на то потребности - не стоит, поскольку:
  • Явное лучше, чем неявное.
  • Простое лучше, чем сложное.

© дзен пайтон
Не то, чтобы следовать дзену необходимо беспрекословно, но тут уже скорее практические соображения:
1.Допустим, сейчас вы напишите необходимые команды с Reply, использующей global для получения ctx, т.е. без явного указания параметра ctx. Допустим, это даже будет работать. Спустя какое-то время захотите дописать новые функции. Но чем больше пройдет времени с момента первоначального написания, тем больше будет вероятность того, что вы забудете как работает ваш код. По крайней мере, сходу вспомнить как по капотом работает та или иная функция будет довольно сложно. И в случае, если ctx как параметр функции указан, то понять, что его нужно вставить при вызове функции, можно будет понять из трех мест, не считая самого кода функции:
  • листинг существующих команд, на которые вы, скорее всего и будете смотреть в первую очередь и в которых будет четко видно, что ctx передается;
  • из текста ошибки, если забудете передать параметр
  • из подсказок любой нормальной ide.

2.По крайней мере для меня, функция использующая параметры вместо глобальных переменных - проще. И, как следствие ее проще читать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы