一个关于yield的重新认识

今天遇到了一个神奇的”bug”,让我对yield的理解更深一步。

这是一个函数,我本来打算试着print一下line内部的格式和内容。

这是调用的主函数:

结果跑出的结果是:

???

我尝试在函数的开头添加print:

结果仍然没有任何的输出。

我试着在main函数添加print:

结果:

也就是说,根本没有进入到get_dataset_from_txt函数啊。

我以为是pycharm的问题还重启了一遍,然而并没有任何作用。问了其他人,他们也觉得很神奇。最后一个同学看了一下函数,发现了问题所在:yield

我突然想起来,yield返回的是一个generator,只有在对generator进行遍历时,才会开始运行

于是,我试着这么写,试着对generator遍历:

虽然报错了,但函数终于是进去了…

结论:有yield的函数会返回一个generator,当对其进行遍历时,函数才会开始运行。