Python生成器在Kotlin中的等效实现是什么
Kotlin 实现记忆自身状态的序列(等效Python生成器)
你给出的Python无限自增生成器,在Kotlin中可直接通过标准库内置的sequence构建器实现,该能力原生支持执行位置记忆、局部状态留存、惰性产出值,和Python生成器的yield行为完全对齐。
等效实现代码
fun gen(): Sequence<Int> = sequence { var x = 0 while (true) { yield(x) x += 1 } }
核心特性说明
- 状态自动留存:
sequence块内的代码为惰性执行,每次从序列中取值时,会从上次yield的位置恢复运行,局部变量x的值、当前执行行号等上下文会被完整保存,无需手动维护额外状态变量。 - 实例行为和Python完全一致:每次调用
gen()都会返回一个全新的、独立状态的序列对象;如果要复用同一个生成状态,把gen()返回的Sequence实例存为变量复用即可。 - 取值方式简单:可以通过
iterator()逐个取next值,也可以直接用take、forEach、map等序列操作符处理,所有操作都是惰性执行的,不会提前运行生成逻辑占用额外资源。
使用示例
fun main() { // 拿到生成器实例 val numGen = gen() // 取前5个值输出:0 1 2 3 4 numGen.take(5).forEach { print("$it ") } println() // 拿到迭代器,验证状态留存 val iter = numGen.iterator() repeat(3) { print("${iter.next()} ") } // 输出0 1 2 repeat(2) { print("${iter.next()} ") } // 接着上次位置输出3 4 }
补充:如果要实现有限长度的序列,只需要在
sequence块内按业务逻辑写分支,执行到代码块末尾自然结束、或者主动return时,序列就会终止迭代,和Python生成器迭代结束的行为逻辑一致。
内容的提问来源于stack exchange,提问作者Dj Sushi
相关产品推荐
相关产品推荐

