在python函数中使用块生成内部

时间:2013-06-07 22:36:17

标签: python generator yield with-statement

我不明白调用以下函数时发生了什么:

def doSmth(inFile):
    print inFile
    with open(inFile,'r') as trainSet:
        for instLine in trainSet:

            # do smth
            yield instLine

为什么当删除带有yield的最后一行时出现错误 该文件不存在(它确实不存在)。然而,当我有线 ,没有错误。 另一个问题,为什么在第二种情况下, print inFile 在第一种情况下没有效果。 感谢。

1 个答案:

答案 0 :(得分:3)

因为你实际上没有迭代生成器:

您的代码中有类似的内容:

doSmth() # simply creates generator without advancing it

没有for x in doSmth()