【问题标题】:*args is giving me unknown trouble*args 给我带来了未知的麻烦
【发布时间】:2017-10-27 00:22:38
【问题描述】:
@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 的目的地)重新打印。但是,在接受用户输入时,它似乎附加了一些奇怪的标点符号。

'Hi' 变成 ('Hi',) 例如。它总是相同的标点符号。正如您在上面看到的,我尝试了两种不同的拉 args 方法。我已经翻遍了,找不到答案 - 知道为什么 *args 会这样工作/如何解决它?

感谢任何帮助!

【问题讨论】:

  • args 是一个元组。 ('Hi',) 就是那个元组,里面有一个元素。它必须是一个元组,因为*args 意味着您将捕获 0 个或多个参数。
  • 你为什么要使用*args
  • 不要将元组args 的字符串表示与实际数据混淆。它只是添加了额外的字符来表示类型,就像 'Hi' 周围出现引号一样,它们不是存储数据的一部分。

标签: python python-3.x discord


【解决方案1】:

尝试使用*args传递参数

例如,在你的情况下

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

【讨论】:

    【解决方案2】:

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

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

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

    像这样:

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

    这确实假设函数的所有参数总是字符串。

    【讨论】:

    • 非常感谢您的快速响应——我意识到我是个白痴并且没有正确使用 *args。作为一个快速的次要问题,我想 - 我将如何允许计算带有空格的字符串?使用 sampleString 而不是 *args,它只接受字符串中的第一个单词。
    • @KitSmith:听起来像Ava 为您拆分命令并将生成的单词作为单独的参数传递。我不熟悉 Ava,看看他们的文档?
    • @KitSmith:谷歌搜索,我没有看到任何与discord Python API 相关的Ava 类,所以我猜这是您自己代码中的一个名称。但同样,您需要查看您的库文档,无论负责实现 .command() 装饰器。
    【解决方案3】:

    这就是长度为 1 的 tuples 的简单表示方式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多