Python函数如何在其参数被这样计算之前变得有效?

Python函数如何在其参数被这样计算之前变得有效?,python,python-3.x,function,parameters,async-await,Python,Python 3.x,Function,Parameters,Async Await,请查看以下代码: 导入异步IO 异步定义计数(): 打印(“一”) 等待asyncio.sleep(1) 打印(“两个”) 异步def main(): 等待asyncio.gather(count(),count(),count())#此行 如果名称=“\uuuuu main\uuuuuuuu”: 导入时间 s=时间。性能计数器() asyncio.run(main()) 已用时间=时间。性能计数器()-s 打印(f“{uuuu文件{uuuu}在{0.2f}秒内执行。”) 看看这一行,asyn

请查看以下代码:

导入异步IO
异步定义计数():
打印(“一”)
等待asyncio.sleep(1)
打印(“两个”)
异步def main():
等待asyncio.gather(count(),count(),count())#此行
如果名称=“\uuuuu main\uuuuuuuu”:
导入时间
s=时间。性能计数器()
asyncio.run(main())
已用时间=时间。性能计数器()-s
打印(f“{uuuu文件{uuuu}在{0.2f}秒内执行。”)
看看这一行,asyncio.gather可以在其参数count()返回值之前完成其功能

但是作为我对python的理解。Python解释器认为外部函数是一个黑盒子,并着重于首先对其参数进行评估。当其参数的所有值都完成时,解释器将其传递给函数执行

根据我以上的理解,以下两者之间没有区别:

wait asyncio.gather(count(),count(),count())

等待(count(),count(),count()) 后者是一个未分配的元组


但是
asyncio.gather
如何以这种形式实现它的作业呢?

因为函数
count
被定义为
async def count():
,调用它时,它不执行函数,而是返回一个coroutine对象

协同程序(如
count
)仅在对其使用
wait
时开始执行。 表达式
await count()
的计算方式如下:

  • 调用count,返回一个协程
  • wait
    开始等待协同程序
  • 执行协同程序,返回
    None
    (因为函数
    count
    不返回任何内容)
  • 表达式
    await count()
    返回
    None
  • 因此,对于您的示例,在执行
    时,等待asyncio.gather(count(),count(),count())

  • count
    被调用三次,返回3个不同的协程
  • 这些协程作为参数传递给
    asyncio.gather
  • asyncio.gather
    本身返回一个协同路由
  • await
    正在等待
    asyncio.gather
    ,它正在等待其所有参数协同路由
  • 第二个表达式,
    await(count(),count(),count())
    不起作用,因为您不能在非协同程序的东西上使用
    await