【发布时间】:2016-07-29 15:38:43
【问题描述】:
我知道已经有人问过类似的问题,但没有回答我的需要,因为我的有点不同。
我的代码:
def tFileRead(fileName, JSON=False):
with open(fileName) as f:
if JSON:
return json.load(f)
for line in f:
yield line.rstrip('\n')
我想做什么:
如果JSON 为真,则表示它是从json 文件中读取的,我想返回json.load(f),否则,我想将文件的行生成到生成器中。
我尝试了将生成器转换为 json 的替代方法,但它变得非常混乱、非常快,而且效果不佳。
【问题讨论】:
-
如果不是 JSON,请尝试返回一个作为生成器的闭包
-
单个函数必须返回或屈服。不是两者都
-
你可以
yield from json.load,但这只会产生字典中的键。您打算如何在这两种情况下使用该功能? -
你试图让这个函数做太多事情......调用者已经知道它是否是 JSON,所以让它调用一个返回 json 的函数或调用一个函数并不是不合理的产生行 - 两者完全不同,调用者必须知道如何处理每行的结果......
-
@Islarf 你应该有两个功能 - 一个用于 json 和一个用于行读取。调用者知道它是否是 json,因此它应该负责调用适当的函数,这样它也知道这样做会得到哪种输出。让函数太聪明或做太多只会给他们和调用者带来麻烦。
标签: python json generator readfile