调用自身的函数 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
我有一个发送到函数的字符串 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