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

2024-04-25 13:01:33 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,我的头衔不好,我不知道该怎么形容我的处境。你知道吗

我写了一个小的模式匹配函数。你知道吗

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)

输出空行,我正在努力找出原因。你知道吗


Tags: 函数字符串inforinputlenrangeprint
3条回答

这是因为函数首先返回的是空字符串''。因此,在i = 0的第一次迭代之后退出循环,并且变量是空字符串,因为:

>>> s = 'ABCD'
>>> s[:0]
''

在控制台中,循环首先在i==0时打印出一个空白字符串。然后它继续循环并打印出字符串中的每个字符。你知道吗

在函数中,您将return最多生成数组中的第0个元素,这与控制台第一次通过循环打印的空白字符串相同。你知道吗

为了更好地查看控制台中发生的情况,您还可以打印索引:

for i in range(len(input_str)):
  print('{0} {1}'.format(i, input_str[:i]))

你正在循环返回。因此,return是在函数中执行的最后一条语句。也就是说,当到达return语句时,控件将离开函数。因此,在第一次迭代i=0时,控件返回“”并退出函数,而不考虑for循环。在console中获得输出是因为我是console,每一行都被一个接一个地解释,不像一次编译的程序。所以控制台显示输出。希望这个答案对你有帮助

相关问题 更多 >