我正在制作一个程序来搜索文件中的代码片段。但是,在我的搜索过程中,它完全跳过for循环(在search_file过程内)。我查看了我的代码并且无法找到原因。 Python似乎只是跳过for循环中的所有代码。
import linecache
def load_file(name,mode,dest):
try:
f = open(name,mode)
except IOError:
pass
else:
dest = open(name,mode)
def search_file(f,title,keyword,dest):
found_dots = False
dest.append("")
dest.append("")
dest.append("")
print "hi"
for line in f:
print line
if line == "..":
if found_dots:
print "Done!"
found_dots = False
else:
print "Found dots!"
found_dots = True
elif found_dots:
if line[0:5] == "title=" and line [6:] == title:
dest[0] = line[6:]
elif line[0:5] == "keywd=" and line [6:] == keyword:
dest[1] = line[6:]
else:
dest[2] += line
f = ""
load_file("snippets.txt",'r',f)
search = []
search_file(f,"Open File","file",search)
print search
答案 0 :(得分:2)
在Python中,参数不通过引用传递。也就是说,如果你传入一个参数并且函数改变那个参数(不要与那个参数的数据混淆),那么传入的变量就不会改变。
您给load_file
一个空字符串,该参数在函数中被引用为dest
。您确实分配了dest
,但这只是分配了局部变量;它不会改变f
。如果您希望load_file
返回某些内容,则必须明确return
。
由于f
从未从空字符串更改,因此将空字符串传递给search_file
。循环遍历字符串会循环遍历字符,但空字符串中没有字符,因此它不会执行循环体。
答案 1 :(得分:0)
在每个函数内添加global f
,然后f
将被视为全局变量。您不必将f
传递给函数。