You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python asyncio示例中括号内函数前星号运算符的作用是什么

asyncio.gather 参数前星号的作用详解

此处的星号语法是Python标准的可迭代对象解包语法,和通用的列表/元组解包逻辑完全一致,和asyncio本身没有特殊绑定,不存在专门适配异步场景的特殊规则。

我们可以把对应代码拆解来看:

  • 星号后面的(makerandom(i, 10 - i - 1) for i in range(3))是一个生成器表达式,迭代它会得到3个协程对象,分别对应makerandom(0, 8)、makerandom(1, 7)、makerandom(2, 6)的调用返回结果。
  • asyncio.gather的函数设计为接受任意数量的可等待对象作为独立位置参数,签名为asyncio.gather(*aws, return_exceptions=False),手动传入少量并发协程时的常规写法为:
await asyncio.gather(coro1, coro2, coro3)
  • 这里的星号作用就是把生成器里的3个协程逐个拆出,作为独立的位置参数传给gather,完全等价于手动书写的代码:
await asyncio.gather(
    makerandom(0, 8),
    makerandom(1, 7),
    makerandom(2, 6)
)

可以用普通函数的解包逻辑类比理解,示例如下:

def add(a, b, c):
    return a + b + c
nums = [1, 2, 3]
print(add(*nums)) # 等价于 add(1,2,3),输出6

此处的星号作用和异步场景下的星号作用没有任何区别,仅只是将普通参数替换为协程对象,将普通函数替换为asyncio.gather而已。

这种写法的核心优势是支持动态数量的并发任务:当需要并发的协程数量不固定时,无需手动逐个写出所有协程参数,使用生成器/列表+星号解包的方式即可灵活适配任意数量的并发场景。

内容的提问来源于stack exchange,提问作者anarchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:57:03