在python 3中循环时,我一直在努力解决问题。 从子例程返回时,“line”变量没有增加。
如何让脚本从中返回最新的readline subsroutine?
以下代码
def getData(line):
#print(line)
#while line in sTSDP_data:
while "/service/content/test" not in line:
line = sTSDP_data.readline()
import os, sys
sFileTSDP = "d:/ess/redo/Test.log"
sTSDP_data = open(sFileTSDP, "r")
for line in sTSDP_data:
if "MOBITV" in line:
getData(line) #call sub routine
print(line)
我正在逐步浏览一个大文件,并且需要调用某个字符串 处理接下来的5(或100)行数据的子例程。当子例程完成并返回主程序时,最好从最后一个继续 子例程中的readline,而不是主程序中的最后一行readline。
Daan的回答就是这个伎俩。
答案 0 :(得分:3)
如何使用return语句?
def getData(line):
#print(line)
#while line in sTSDP_data:
while "/service/content/test" not in line:
line = sTSDP_data.readline()
return line
import os, sys
sFileTSDP = "d:/ess/redo/Test.log"
sTSDP_data = open(sFileTSDP, "r")
for line in sTSDP_data:
if "MOBITV" in line:
line = getData(line) #call sub routine
print(line)
注意变量的范围。 getData函数中的'line'与循环中的'line'不同。
答案 1 :(得分:1)
嗯,作业不能通过参考。这意味着如果您在一个函数中重新分配变量,那么它将不会修改另一个函数中的值(除非存在global
和nonlocal
等特定异常。 (请注意:这是重新分配,而不是修改。如果修改列表,所有对列表的引用都被“修改”)。
只需将return line
放在getData(line)的末尾
def getData(line):
#print(line)
#while line in sTSDP_data:
while "/service/content/test" not in line:
line = sTSDP_data.readline()
return line