Python Yield语句块递归函数?
我在这个问题上花了很多时间,却没有找到任何线索。。。我不明白为什么yield禁止我的递归函数在没有任何输出的情况下执行Python Yield语句块递归函数?,python,recursion,generator,yield,Python,Recursion,Generator,Yield,我在这个问题上花了很多时间,却没有找到任何线索。。。我不明白为什么yield禁止我的递归函数在没有任何输出的情况下执行 def unlist(l): if isinstance(l, unicode) or isinstance(l, str): print "This should be printed at least !" yield l if isinstance(l, list): for elem in l:
def unlist(l):
if isinstance(l, unicode) or isinstance(l, str):
print "This should be printed at least !"
yield l
if isinstance(l, list):
for elem in l:
unlist(elem)
l = ['a', u'b', 1]
for each in unlist(l): print each
关于在哪里/寻找什么的任何提示?您需要“返回”,或者在本例中,
产生递归调用的结果:
def unlist(l):
if isinstance(l, unicode) or isinstance(l, str):
print "This should be printed at least !"
yield l
if isinstance(l, list):
for elem in l:
for res in unlist(elem):
yield res
在这种情况下,yield
可能不是必需的,但您至少需要在生成器上循环以执行包含的代码。您只需调用unlist(elem)
即可创建生成器,但只有在生成器上循环才能使其执行生成器函数以生成项
演示:
在Python 3.3及更新版本中,您可以使用yield from
语法:
def unlist(l):
if isinstance(l, unicode) or isinstance(l, str):
print "This should be printed at least !"
yield l
if isinstance(l, list):
for elem in l:
yield from unlist(elem)
最后,但并非最不重要的一点是,您可以使用测试str
和unicode
:
if isinstance(l, basestring):
# either a str or a unicode value
您需要“返回”,或者在本例中,产生递归调用的结果:
def unlist(l):
if isinstance(l, unicode) or isinstance(l, str):
print "This should be printed at least !"
yield l
if isinstance(l, list):
for elem in l:
for res in unlist(elem):
yield res
在这种情况下,yield
可能不是必需的,但您至少需要在生成器上循环以执行包含的代码。您只需调用unlist(elem)
即可创建生成器,但只有在生成器上循环才能使其执行生成器函数以生成项
演示:
在Python 3.3及更新版本中,您可以使用yield from
语法:
def unlist(l):
if isinstance(l, unicode) or isinstance(l, str):
print "This should be printed at least !"
yield l
if isinstance(l, list):
for elem in l:
yield from unlist(elem)
最后,但并非最不重要的一点是,您可以使用测试str
和unicode
:
if isinstance(l, basestring):
# either a str or a unicode value
当然还有其他方法来迭代列表:)这段代码只给出了我的问题的一个例子。当然还有其他方法来迭代列表:)这段代码只给出了我的问题的一个例子。