在 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
,表示结束。
我正在写一个简单的工具来读取我的文件,它应该能够区分给定的路径是指向某个文件还是文件的根路径。
我的代码是这样的:
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
,表示结束。