【发布时间】:2017-01-09 11:38:25
【问题描述】:
我有这个递归函数,它用于为你传递给它的任何字符串值生成所有可能的大写和小写。
这是代码示例和输出:
def test (name):
if not name:
yield ""
else:
first=name[:1]
for sub in test(name[1:]):
yield first.lower()+sub
yield first.upper()+sub
#print (first)
for x in test("abc"):
print (x)
输出将是这样的:
abc
Abc
aBc
ABc
abC
AbC
aBC
ABC
如果我在两个yield函数下添加打印函数:
print(first)
输出会是这样的:
abc
Abc
a
aBc
ABc
a
b
abC
AbC
a
aBC
ABC
a
b
c
我只想清楚地解释每个步骤以及正在发生的事情以及为什么我每次都获得这些值以及它是如何工作的,因为递归和生成器一起让我迷失了这里。
【问题讨论】:
-
您正在处理生成器这一事实在这里没有任何区别。如果你有
return而不是yield并进行一些重新组织,那将是完全相同的。此外,如果您对 slicing 感到满意,那么生成器应该不难理解。最后一点,打印first并不能让您深入了解。尝试在每次调用时打印函数中的 argument。 -
谢谢你的回复....是的,我已经试过了,我得到了我脑海中应该是什么参数通过“abc”参数通过“bc”参数通过“c”参数通过了“”,但问题是你是否理解生成和递归..只要给我这个程序的痕迹..我只想逐步了解它是如何工作的......为什么它打印 abc , Abc 然后 aBC .. .从代码中,下一个调用“首先应该等于”b”!!我在这里想念一些关于递归的东西!!
标签: python python-3.x recursion generator yield