我是一位经验丰富的 Java 程序员,正在用 Python 重新实现一些代码,因为我只是在学习这门语言。我遇到的问题是,当我传入全局变量时,一个方法没有返回任何内容,但在传入文字时返回预期的代码。代码返回传入的指定长度的单词列表,从传递的字符串开始例如:
print getNGramBeginsWords("ha", 5)
返回
['HAAFS', 'HAARS', 'HABIT', 'HABUS', 'HACEK', 'HACKS', 'HADAL', 'HADED', 'HADES',
'HADJI', 'HADST', 'HAEMS', 'HAETS', 'HAFIZ', 'HAFTS', 'HAHAS', 'HAIKA', 'HAIKS',
'HAIKU', 'HAILS', 'HAINT', 'HAIRS', 'HAIRY', 'HAJES', 'HAJIS', 'HAJJI', 'HAKES',
'HAKIM', 'HAKUS', 'HALAL', 'HALED', 'HALER', 'HALES', 'HALID', 'HALLO', 'HALLS',
'HALMA','HALMS', 'HALON', 'HALOS', 'HALTS', 'HALVA', 'HALVE', 'HAMAL', 'HAMES',
'HAMMY', 'HAMZA', 'HANCE', 'HANDS', 'HANDY', 'HANGS', 'HANKS', 'HANKY', 'HANSA',
'HANSE', 'HANTS', 'HAOLE', 'HAPAX', 'HAPLY', 'HAPPY', 'HARDS', 'HARDY', 'HARED',
'HAREM', 'HARES', 'HARKS', 'HARLS', 'HARMS', 'HARPS', 'HARPY', 'HARRY', 'HARSH',
'HARTS', 'HASPS', 'HASTE', 'HASTY', 'HATCH', 'HATED', 'HATER', 'HATES', 'HAUGH',
'HAULM', 'HAULS', 'HAUNT', 'HAUTE', 'HAVEN', 'HAVER', 'HAVES', 'HAVOC', 'HAWED',
'HAWKS', 'HAWSE', 'HAYED', 'HAYER', 'HAYEY', 'HAZAN', 'HAZED', 'HAZEL', 'HAZER',
'HAZES']
正如它应该。然而,
print inputString
print numLetters
print getNGramBeginsWords(inputString, numLetters)
返回
ha
5
[]
inputString 和 numLetters 是全局变量,我见过它们被称为“危险”,尽管我不知道为什么,并且认为它们可能是造成这种奇怪现象的原因?即使是用作参数的全局变量的本地副本也无济于事。也许我需要在方法的参数中使用“全局”关键字,尽管从我的研究看来,除非您更改全局变量,否则您不需要“全局”关键字?任何建议或帮助将不胜感激。如果这是方法的问题,这里是:
def getNGramBeginsWords(nGram, length):
dict = open('/home/will/workspace/Genie/src/resources/TWL06.txt', 'r')
nGram = nGram.upper()
words = []
for line in dict:
if(len(line)>0):
if(len(nGram)>len(line.strip()) | len(line.strip())!= length):
continue
s = line.strip()[:len(nGram)]
if(s == nGram and len(line.strip()) == length):
words.append(line.strip())
return words