为什么我的函数返回空字符串,但是在python控制台中可以正常工作?

时间:2019-04-01 15:48:01

标签: python python-3.x

为可怜的头衔表示歉意,我不知道该怎么形容我的处境。

我写了一个小的模式匹配函数。

def substrings(input_str):
    '''Generate all leading substrings of an input string'''
    for i in range(len(input_str)):
        return input_str[:i]

它应该返回一系列字符串切片。如果输入为ABCD,则应输出ABCDABCABA

当我在python控制台(如下所示的 )中测试了此功能时,它的行为正确并输出了所有预期的字符串。

for i in range(len(input_str)):
    print(input_str[:i])

但是当在我的程序主体中使用时,它什么也不返回。例如;

test1 = substrings('ABCD')
print(test1)

输出空白行,我正在努力找出原因。

4 个答案:

答案 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

您的代码现在应该可以正常工作了!