Python函数只返回一个值

Python函数只返回一个值,python,function,nltk,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)

我想从函数返回一个由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)


您的
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
将在
中为范围(num)内的i调用每次迭代。这就是为什么您得到5个打印输出。

它只返回一个单词,因为您的
return
语句位于
for
循环中。它将经过第一次迭代,随机选择一个
单词
,然后立即返回

这就是我修复它的方法-这也是一个放置
随机选择的好地方

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)

在这行中:“word=arr[int((len(arr))*random.random…'我相信您选择的是一个单词。打印在它前面,所以您显示了所有单词Fernand0,那里没有参数。似乎OP主要关心的是为什么
return
无法按预期工作-我认为
print
语句主要用于调试。行`#print(Word,end='')`将打印变量
word
中的任何内容。紧接着,您将在
word=arr[int((len(arr))*random.random()中的arr随机位置分配给word
然后你返回这个。也就是说,如果我一个字都正确的话。所以我的回答解释了为什么这不起作用。我编辑代码,返回的内容与打印的内容相同,它在任何其他位置都会出错。它必须利用makePairs()函数的条件分布,否则它只打印工作,它不像一个短语。
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)
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)