为了账号安全,请及时绑定邮箱和手机立即绑定

python在go中枚举

python在go中枚举

Go
qq_笑_17 2022-10-17 15:48:23
假设我有斐波那契数的生成器,我想使用enumerate(get_next_fibs(10))并且我想有对生成器index, number_from_generator,我正在努力寻找“命名返回值”的解决方案这不是应该如何完成,而是为了学习有关生成器的特定内容package mainimport "fmt"func get_next_fibs(ii int) func() int {    i := 0    a, b := 0, 1    fc := func() int {        i++        a, b = b, a+b        if ii <= i {            return -1        }        return a    }    return fc}func enumerate(iter func() int) func() (index, v int) {    index := 0    fc := func() (index, v int) {        v := iter()        return        index++    }    return fc}func main() {    iter := enumerate(get_next_fibs(10))    // iter := get_next_fibs(10)    fmt.Printf("iter = %T\n", iter)    for tuple := iter(); tuple != -1; tuple = iter() {        fmt.Println("tuple:", tuple)    }}
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

您在此代码示例中有几个问题:

  1. 你不能有index++after return 声明。如果您需要在-ing之后做某事,请使用。deferreturn

  2. 您错过了变量阴影在 go 中的工作方式。因此,您试图修改错误的index变量。

  3. Go 没有元组。

...

func enumerate(iter func() int) func() (index, v int) {

    counter := 0

    return func() (index, v int) {

        i := counter

        counter++

        return i, iter()

    }

}

...

func main() {

    iter := enumerate(get_next_fibs(10))

    fmt.Printf("iter = %T\n", iter)

    for i, v := iter(); v != -1; i, v = iter() {

        fmt.Printf("i: %d, v: %d\n", i, v)

    }

}


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号