Python函数只返回一个值

时间:2017-11-12 08:08:18

标签: python function nltk

我想从函数返回一个从nltk生成的单词数组。为什么这个函数只返回一个单词,如果我注释返回并取消注释,则返回5个单词。

我想返回它们,并在其他功能中使用它们。

    file = open('Text/Walden.txt', 'r',encoding="utf8")
walden = file.read()
walden = walden.split()





def makePairs(arr):
    pairs = []
    for i in range(len(arr)):
        if i < len(arr)-1:
            temp = (arr[i], arr[i+1])
            pairs.append(temp)
    return pairs

def generate(cfd, word = 'the', num = 5):
    for i in range(num):
        arr = []                                      # make an array with the words shown by proper count
        for j in cfd[word]:
            for k in range(cfd[word][j]):
                arr.append(j)

        word = arr[int((len(arr))*random.random())] # choose the word randomly from the conditional distribution
    print(word, end=' ')
    return(word)
            #return random.choices(arr, k=num)


pairs = makePairs(walden)
cfd = nltk.ConditionalFreqDist(pairs)
generate(cfd)

输出现在是这样的:

little The print The
had 
>>> 

But girl?"— print girl?"—
cases 
>>> 

2 个答案:

答案 0 :(得分:0)

您的return语句缩进太多了。退一步:

def generate(cfd, word = 'the', num = 5):
    for i in range(num):
        arr = []                                      # make an array with the words shown by proper count
        for j in cfd[word]:
            for k in range(cfd[word][j]):
                arr.append(j)
        #print(word, end=' ')
        word = arr[int((len(arr))*random.random())] # choose the word randomly from the conditional distribution

    return(word)

当您注释掉return并使用print语句时,print中的每次迭代都会调用for i in range(num)...。这就是为什么你得到5个打印输出的原因。

答案 1 :(得分:0)

它只返回一个单词,因为for语句在word循环内。它将经历第一次迭代,随机选择random.choices并立即将其返回。

这就是我修复它的方式 - 这也是def generate(cfd, word = 'the', num = 5): arr = [] for j in cfd[word]: # assuming your code to parse cfd is correct for k in range(cfd[word][j]): arr.append(j) return random.choices(arr, k=num) 的一个整洁的地方:

{{1}}