若有幫助到你,記得點贊哦!
# -*- 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)))