为什么这个python函数返回None

时间:2015-04-16 14:29:56

标签: python return-value

这是功能:

def genWords():
    global wordsList; global current_char; global char_seq_cords; global current_sequence

    current_sequence = "%s%s" % (current_sequence, getChar(current_char))
    testable_prefixes =  map( lambda x: ["%s%s" % (current_sequence, getChar(x)), x], possible_chars() )
    valid_seqs = filter(lambda x: linguisticly_possible_seq(x[0]),
                        testable_prefixes)  # 2 length list with char seq and char cords second

    for i in valid_seqs:
        if (u"%s" % current_sequence).lower() in english_tree:
            wordsList.append(current_sequence)
        current_char = i[1]
        char_seq_cords.append(current_char)

        genWords()

    if not valid_seqs:
        wordsList.append(current_sequence)
        return wordsList
print genWords()
print wordsList

我希望print genWords()的输出是一个列表,而不是None。我很困惑的原因是因为最后一行print wordsList打印出预期的输出;另外,如果我在print wordsList之前插入此行return wordsList,我会再次获得预期的输出。我似乎无法弄清楚为什么函数返回None?

这里的src如果你需要参考: https://docs.google.com/document/d/1okYiW3jIkZF8HDwpU5Efx32HHkl1hlqcFj0lP6Io0oY/edit?usp=sharing

2 个答案:

答案 0 :(得分:2)

如果符合valid_seqs条件,您只能到达return语句(从而返回您的单词列表)。

否则,函数"只返回",默认为None值。

请注意,在这种情况下,返回的内容不是您的空列表(肯定等同于None)。相反,如果您没有指定其他返回值,则None是每个函数都会返回的内容。

答案 1 :(得分:1)

如果if not valid_seqs是空列表,

False将返回valid_seqsgen_words返回None,因为如果valid_seqs为空,您尚未定义任何返回值。