为可怜的头衔表示歉意,我不知道该怎么形容我的处境。
我写了一个小的模式匹配函数。
def substrings(input_str):
'''Generate all leading substrings of an input string'''
for i in range(len(input_str)):
return input_str[:i]
它应该返回一系列字符串切片。如果输入为ABCD
,则应输出ABCD
,ABC
,AB
和A
。
当我在python控制台(如下所示的 )中测试了此功能时,它的行为正确并输出了所有预期的字符串。
for i in range(len(input_str)):
print(input_str[:i])
但是当在我的程序主体中使用时,它什么也不返回。例如;
test1 = substrings('ABCD')
print(test1)
输出空白行,我正在努力找出原因。
答案 0 :(得分:1)
这是因为函数返回的第一件事是空字符串''
。因此,您在i = 0
的第一次迭代后退出循环,并且您的变量为空字符串,原因是:
>>> s = 'ABCD'
>>> s[:0]
''
答案 1 :(得分:1)
您正在循环返回。因此,返回值是将在函数中执行的最后一条语句。也就是说,当到达return语句时,控件将离开该函数。因此,在第一个迭代i = 0时,无论for循环如何,控制都返回''并退出函数。在控制台中,由于我正在控制台中,所以每一行都被一次解释,这与立即编译的程序不同,因此获得了输出。因此,控制台显示输出。希望这个答案对您有帮助
答案 2 :(得分:1)
在控制台中,循环在i==0
时首先输出空白字符串。然后它将继续循环并打印出字符串中的每个字符。
在该函数中,您return
直到数组中的第0个元素,这与控制台在循环中第一次打印的空白字符串相同。
要更好地查看控制台中发生的情况,您也可以打印索引:
for i in range(len(input_str)):
print('{0} {1}'.format(i, input_str[:i]))
答案 3 :(得分:0)
发生此问题是因为您试图循环返回信息。调用return语句时,它将退出该函数。您应该做的是使用yield关键字。尝试这样做
self._compute
您的代码现在应该可以正常工作了!