若有帮助到你,记得点赞哦!
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 30 20:53:08 2018
@author: Lelouch_C.C
"""
"""
任何包含yield语句的函数称为生成器。
yield语句不像return那样返回值,而是每次产生多个值;
每次产生一个值时,函数就会被冻结,即函数停在那个点等待被重新唤醒。
"""
"""
nested=[[1,2],[3,4],[5]]
#简单生成器(只处理两层嵌套)
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element
print(list(flatten(nested)))
#输出:[1, 2, 3, 4, 5]
#"""
"""
nested=[[[1],2],3,4,[5,[6,7]],8]
#递归生成器(处理任意层嵌套)
def flatten(nested):
try:
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield nested
#上述每次递归的尽头都是一个整形数字,赋给nested,
#由于整形数字不可以迭代,会进行报错,而我们令报错会输出yield nested
#也就正好把每个数字进行输出,这说的已经不能再细了。
print(list(flatten(nested)))
#输出:[1, 2, 3, 4, 5, 6, 7, 8]
#"""
nested=['foo',['bar',['baz']]]
#递归生成器(处理任意层嵌套且可以处理字符串)
def flatten(nested):
try:
###########判断是否是字符串,若是字符串,报错############
try:nested+''
except TypeError:pass
else:raise TypeError
#######################################################
for sublist in nested:
for element in flatten(sublist): #递归recursion很巧很神奇
yield element
except TypeError:
yield nested
#上述每次递归的尽头都是一个字符串,赋给nested,经判断,报错,而我们令报错会输出yield nested
#也就正好把每个字符串进行输出,这说的已经不能再细了。
print(list(flatten(nested)))