Python函数只返回一个值
我想从函数返回一个由nltk生成的单词数组。为什么这个函数只返回一个单词,如果我对返回进行注释并取消注释,打印将返回5个单词 我想返回它们,并在其他函数中使用它们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)
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)