【问题标题】:python recursive function doesn't return anything at all [closed]python递归函数根本不返回任何东西[关闭]
【发布时间】:2014-10-14 02:46:05
【问题描述】:

我写了以下函数:

def splitter(input, inc=0):
    if inc == len(regex):
        print "return point reached"
        return input
    print inc, input
    output = []
    if type(input) is list:
        for i in input:
            o = re.split(regex[inc],i)
            if not o[0] == i:
                for x in o:
                    output.append(x)
            else:
                output.append(i)
    else:
        o = re.split(regex[inc],input)
        if not o[0] == input:
            for x in o:
                output.append(x)
        else:
            output.append(input)
    inc+=1
    splitter(output, inc)

正则表达式定义为:

regex = [' & ',' / ',' \+ ',' and ',' und ',' ft\. ',' feat\. ']

输入是一些类似的字符串

"Benga und Welsh ft. Warrior Queen and Skream feat. Benny Ill"

目标是在正则表达式中的条目指定的每个点处拆分字符串。 print inc, input 行打印的输出符合预期(它提供['Benga', 'Welsh', 'Warrior Queen', 'Skream feat. Benny Ill'] 作为输入),甚至声明print "return point reached" 的行正在执行,但函数似乎根本没有返回任何内容。 知道我从 django manage.py-shell 调用函数重要吗?

感谢任何帮助的想法! r

【问题讨论】:

  • 请修正格式/缩进。否则,很难看出函数定义在哪里结束。
  • 你在最后一行忘记return splitter(output,inc)
  • 为什么不使用调试器?
  • 您的缩进需要一些工作,因为现在发布的内容甚至无效。您的函数返回任何内容的唯一位置是if inc == length(gex)。我怀疑你打算 return output 或函数末尾的东西,但我不确定你的最后两行是否打算成为函数的一部分,还是在它之外......

标签: python list function recursion return


【解决方案1】:

您在函数的最后一行缺少return。这是工作代码的示例,缩进固定:

import re

regex = [' & ',' / ',' \+ ',' and ',' und ',' ft\. ',' feat\. ']

def splitter(input, inc=0):
    if inc == len(regex):
        print "return point reached"
        return input
    print inc, input
    output = []
    if type(input) is list:
        for i in input:
            o = re.split(regex[inc], i)
            if not o[0] == i:
                for x in o:
                    output.append(x)
            else:
                output.append(i)
    else:
        o = re.split(regex[inc], input)
        if not o[0] == input:
            for x in o:
                output.append(x)
        else:
            output.append(input)
    inc += 1

    # I added the return statement here:
    return splitter(output, inc)

print(splitter("Benga und Welsh ft. Warrior Queen and Skream feat. Benny Ill"))

输出:

0 Benga und Welsh ft. Warrior Queen and Skream feat. Benny Ill
1 ['Benga und Welsh ft. Warrior Queen and Skream feat. Benny Ill']
2 ['Benga und Welsh ft. Warrior Queen and Skream feat. Benny Ill']
3 ['Benga und Welsh ft. Warrior Queen and Skream feat. Benny Ill']
4 ['Benga und Welsh ft. Warrior Queen', 'Skream feat. Benny Ill']
5 ['Benga', 'Welsh ft. Warrior Queen', 'Skream feat. Benny Ill']
6 ['Benga', 'Welsh', 'Warrior Queen', 'Skream feat. Benny Ill']
return point reached
['Benga', 'Welsh', 'Warrior Queen', 'Skream', 'Benny Ill']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2016-11-10
    • 2015-01-16
    • 2016-09-25
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多