Discord.py - Есть ли способ использовать * args или параметр с несколькими словами, не являясь последним параметром? - PullRequest
0 голосов
/ 28 мая 2020

Вот текущая команда:

`async def namemembers(self, ctx, members, name, *args):`

Это работает достаточно хорошо, но я хотел бы добавить больше параметров после * args, или если есть другой способ использовать параметр name, чтобы разрешить пробелы и несколько слов. Если я попытаюсь сделать что-то вроде:

`async def namemembers(self, ctx, members, name, *args, worlds):`

Чтобы определить мир, он всегда говорит, что world - обязательный аргумент, который отсутствует. «Миры» разделяются /, но / по-прежнему считается частью * args. В идеале у меня была бы такая команда:

`async def nameM(self, ctx, name, *, worlds):`

, которая позволила бы мне использовать параметр name с большим количеством слов. Поскольку в настоящее время использование этого способа «позволяет» мне вводить несколько слов, но бот все равно отправляет обратно только первое слово.

Надеюсь, мой вопрос имеет смысл.

1 Ответ

1 голос
/ 28 мая 2020

Нет. *args неоднозначен, потому что он принимает любое количество аргументов, поэтому Python не сможет узнать, когда вы закончили с *args и перешли на worlds.

Python не 'Не знаю и не позволю вам заставить worlds быть только kwarg.

Как правило, вы пишете методы с аргументами в следующем порядке:

def main(arg1, arg2, ..., *args, *kwargs):
    pass
...