* args给了我未知的麻烦

时间:2017-05-26 07:25:57

标签: python python-3.x discord

@Ava.command()
async def general(*args):
    await Ava.send_message(message.Object(id='207602020968955906'), args)

@Ava.command(aliases=['game'])
async def setgame(*args):
    await Ava.change_presence(game=discord.Game(name='%s'% (args)))

我仍然是Python编码和使用API​​的新手,但我似乎无法让它工作。

此代码应该接受用户输入(在命令之后)并在别处(在给定ID的目的地)重新打印它。但是,在接受用户输入时,似乎附加了一些奇怪的标点符号。

例如,'嗨'变成('嗨')。它总是一样的标点符号。我已经尝试了两种不同的拉动方法,如上所示。我看了一遍,无法找到答案 - 任何想法为什么* args正在这样工作/如何绕过它?

感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

这就是如何表示长度为1的tuples

>>> ('Hi', 'Bye')[:1]
('Hi',)

答案 1 :(得分:0)

*args捕获0个或多个参数,并将它们存储在元组中。当使用一个参数调用函数时,会得到一个包含该元素的元组:

>>> def foo(*args):
...     print(args)
...
>>> foo('Hi')
('Hi',)

您正在将该元组转换为字符串,并且这样做包含整个元组表示法。也许你可以字符串加入一个更长的字符串,中间有空格?

像这样:

name = ' '.join(args)
await Ava.change_presence(game=discord.Game(name=name))

这假设函数的所有参数都是字符串。

答案 2 :(得分:0)

尝试使用*args

传递参数

例如,在您的情况下

await Ava.send_message(message.Object(id='207602020968955906'), *args)