调用自身的函数 returns 仅是其调用的第一个结果

Function that calls itself returns only first result of its call

我有一个发送到函数的字符串 s="expences > drinks"。在该函数中,我应该使用 raw_input() 添加新值,直到我输入一个空字符串。

这些输入中的每一个都应该添加到初始字符串中。在空字符串的情况下,函数必须 return 包含所有先前添加的单词的字符串。

我试图通过从自身调用函数并将更改后的字符串传递给它来实现它,但它只是 returns,只有第一个添加的单词。我还尝试避免使用 while True: 从自身调用函数,如果空字符串则中断循环并 return 值。但是这些变体中的 none 可以正常工作。

请解释我哪里做错了,什么是最符合 pythonic 的方法。

代码如下:

#!/usr/bin/env python -tt
# -*- coding: utf-8 -*-

def create_sub_cat(parent):     
    print "creating subcat\n %s > " %(parent)
    conf=raw_input("type new subcat or press \"ENTER\" to save changes\n")
    if conf!="":
        parent+=" > "+conf
        create_sub_cat(parent)
    return parent

s="expences  > drinks"
print create_sub_cat(s)

您可以将 iter 与 for 循环一起使用,您不需要继续调用该函数,iter 接受一个标记值作为它的最后一个参数,它会一直循环直到输入标记值:

def create_sub_cat(parent):
    print "creating subcat\n {} > ".format(parent)
    for conf in iter(lambda: raw_input("type new subcat or"
                                       " press \"ENTER\" to save changes\n"),""): # empty string for sentinel value
        parent += " > " + conf
    return parent

或者使用一段时间 True:

def create_sub_cat(parent):
    print "creating subcat\n {} > ".format(parent)
    while True:
        conf = raw_input("type new subcat or"
                                       " press \"ENTER\" to save changes\n")
        if not conf: # if user enters empty string break
            break
        parent +=" > " + conf # else keep concatenating
    return parent

为什么你的代码不起作用是因为你没有return递归调用所以你只得到第一个值:

def create_sub_cat(parent):
    print "creating subcat\n %s > " %(parent)
    conf=raw_input("type new subcat or press \"ENTER\" to save changes\n")
    if conf!="":
        parent+=" > "+conf
        return create_sub_cat(parent) # return 
    return parent