0

我正在制作一个在文件中搜索代码片段的程序。但是,在我的搜索过程中,它完全跳过了 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
4

2 回答 2

2

在 Python 中,参数不是通过引用传递的。也就是说,如果您传入一个参数并且函数更改了该参数(不要该参数的数据混淆),则传入的变量将不会更改。

您给出的是load_file一个空字符串,并且该参数在函数中被引用为dest. 您确实 assign dest,但这只是分配了局部变量;它没有改变f。如果你想load_file返回一些东西,你必须明确return它。

由于f从未从空字符串更改,因此将空字符串传递给search_file. 循环遍历字符串会遍历字符,但是空字符串中没有字符,所以它不会执行循环体。

于 2013-01-12T03:12:53.540 回答
0

在每个函数内部 add global fthenf将被视为全局变量。您也不必传入f函数。

于 2013-01-12T04:33:35.400 回答