在 read_file 函数中使用 yield 和 return

use yield and return in a read_file function

我正在写一个简单的工具来读取我的文件,它应该能够区分给定的路径是指向某个文件还是文件的根路径。

我的代码是这样的:

ALL_SEQ = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10']

def read_pose_txt(filepath):
    if os.path.isfile(filepath):
        return np.loadtxt(filepath)
    elif os.path.isdir(filepath):
        for seq in ALL_SEQ:
            filepath_x = os.path.join(filepath, (str(seq)+".txt"))
            yield np.loadtxt(filepath_x)
    else:
        raise RuntimeError("wrong filepath")


但是当我给出某个文件的路径时,这个函数也会生成一个生成器而不是简单的 return 加载的 txt。

为什么我不能在同一个函数中使用 return 和 yield?有没有更好的方法来实现我这样一个智能文件的目标-reader?

此致

你的if倒退了:如果路径是目录,你调用loadtxt;如果它是一个文件,则循环调用 loadtxt.

在生成器中,yield 语句产生生成器函数的结果。您应该始终使用 yield 来产生结果。如果只有一个结果,那么只yield一次

所以,我猜你想替换这个:

return np.loadtxt(filepath)

有了这个:

yield np.loadtxt(filepath)
return

从生成器到 return 是有效的,但你不能 return 这样的值。


顺便说一句:实际上,return x在Python3中有效,return值以异常结束,这是专门为非常特殊的异步情况量身定制的功能等待框架。在您真正知道自己在做什么之前,最好将其视为禁止。

如果函数中有 yield,请仅使用空 return,表示结束。