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