* 作为 discord.py API 函数中的参数有什么用?

What is the usage of * as an argument in discord.py API functions?

我参考了 中关于 Discord Python 机器人头像命令的代码:

@commands.command()
async def avatar(self, ctx, *,  avamember : discord.Member=None):
    userAvatarUrl = avamember.avatar_url
    await ctx.send(userAvatarUrl)

*作为自变量的作用是什么?我希望将其视为 *args**kwargs

他们被称为keyword-only arguments。他们限制 * 之后的所有参数接受 keyword-only 个参数。

以你给出的例子:

@commands.command()
async def avatar(self, ctx, *,  avamember : discord.Member=None):
    userAvatarUrl = avamember.avatar_url
    await ctx.send(userAvatarUrl)

如果仅使用位置参数调用 avatar 函数:

avatar(ctx_value, "member_value")

它会抛出一个错误。 TypeError: avatar() takes 1 positional argument but 2 were given.

该函数只接受位置参数作为第一个参数,keyword-only参数作为第二个参数。为避免错误,您必须使用 keyword-only 参数作为第二个参数调用 avatar 函数:

avatar(ctx_value, avamember="member_value")

。我正在为“member_value”使用字符串,因为我不知道 discord.Member 类型提示。所以你必须用合适的类型替换它。

Stanley Ulili 在使用 basic python 时所说的是正确的,但在 discord.py 的上下文中,* 的含义有点不同。

* 基本上意味着仅变量将消耗命令参数的其余部分。否则每个参数仅限于一个词,除非使用引号。在此处添加 * 将使名为 Wasi Master 的成员成为 !avatar Wasi Master。否则它会报错说找不到成员“Wasi”,因为它只接受第一个词作为参数 avamember 并排除其余的。使用 * 将使其接受整个“Wasi Master”作为 avamember 变量