对于生成器来说,最大的作用可能是对于内存的节省,因为每次调用next()
函数才会去取一次数据,直到抛出StopIteration
异常。但这并不是本次笔记的重点,本次笔记的重点在于一定要牢记每次调用生成器之后,都会消耗生成器中的值
1 | for i in range(3)) a = (i |
对于经常使用的(i in a)
来说,其实它底层调用的还是生成器原理
1 | while True: |
所以,先看以下示例
1 | b = (i for i in range(5)) |
原因在于每次使用print函数时,都会消耗掉b中的值,而每次使用in函数时,比如2 in b
就会消耗掉0, 1, 2这三个值,剩下3, 4这两个值,而4 in b
时,其中存在4,就返回为True,此时b中已消耗完所有元素,在此调用就会失败。
在看一个leetcode示例,给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
1 | def is_subsequence(a, b): |