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。を割り当てますがdest、それはローカル変数を割り当てるだけです。変わりませんf。何かを返したい場合load_fileは、明示的に返す必要がありますreturn

は空の文字列から変更されていないためf、空の文字列が に渡されsearch_fileます。文字列をループすると文字がループされますが、空の文字列には文字がないため、ループの本体は実行されません。

于 2013-01-12T03:12:53.540 に答える
0

各関数内で addglobal ffグローバル変数として扱われます。f関数に渡す必要もありません。

于 2013-01-12T04:33:35.400 に答える