生成器;递归生成器
PEP 255 – Simple Generators | peps.python.org 生成器的使用
Functional Programming HOWTO — Python 3.11.3 documentation
附:
递归生成器的难点:Recursive Generators in Python - Prospero Coder
一个单词字母所有排序方式的程序:
1 def permutation_generator(word): 2 if len(word) == 0: 3 yield "" 4 else: 5 for m in range(len(word)): 6 for n in permutation_generator(word[:m] + word[m + 1:]): 7 yield word[m] + n 8 9 for x in permutation_generator("home"): 10 print(x)
部分output:
1、生成器的使用。list(生成器),next(生成器),不同方式获取生成器不同数值。
2、send() 改变生成器的参数
3、yeild和return的不同
用yield
1、当只是返回实例时,生成器执行但不打印
2、当生成器next输出时,打印且yield回一个值
3、第二次调用next,yield后面的程序行也被执行。
第二次获取next(),先运行yeild后面程序,输出值为上次保留的值。再从上次递归位置再次探索。
注意: flatten()生成器返回值具有可迭代性。
4、yeild在迭代生成器中的提示如下。⭐⭐⭐⭐⭐⭐
4、生成一个生成器实例,不运行生成器中的程序行,因此打印行均没有输出。所以,需要初始化生成器实例,需要next(b)进行初始化。
用return
4、try except 异常捕捉相当于if else。不同点,if 执行后else不执行;但是try执行产生警告或错误,将被except捕捉,也就是存在try执行,except也执行的情况。