You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 08:24:26