我想遍历文件并返回每一行:
for i in master_file:
columns = re.split('\s{2,}', i)
last_name = columns[1]
print(last_name)
如果我将print
替换为return
,它只会返回columns[1]
作为第一行,但我想将其返回给所有行。所以我可以在我的函数中的其他地方使用该信息。
答案 0 :(得分:9)
在这种情况下,您需要yield
值,而不是return
它:
for i in master_file:
columns = re.split('\s{2,}', i)
last_name = columns[1]
yield last_name
完整样本:
def readLastNames ():
for i in master_file:
columns = re.split('\s{2,}', i)
last_name = columns[1]
yield last_name
for last_name in readLastNames ():
print (last_name)
非常粗略的解释:yield
将参数和控件传递回调用上下文,保持被调用上下文的状态,然后从那里恢复。
答案 1 :(得分:3)
而不是return
,请使用yield
这就像一个回归,但它保持在迭代中的位置。
答案 2 :(得分:1)
你可以使用列表理解,
return [re.split('\s{2,}', line, 2)[1] for line in master_file]