* 作为 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 变量
我参考了
@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 变量