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()
的计算方式如下:
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