返回顶部
首页 > 资讯 > 后端开发 > Python >作为通道实现的 Python 风格生成器:过早阅读
  • 196
分享到

作为通道实现的 Python 风格生成器:过早阅读

2024-02-09 05:02:06 196人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

PHP小编柚子带来了一篇关于通道实现的python风格生成器的文章。在这篇文章中,我们将介绍过早阅读的概念,以及如何使用通道来实现Python风格的生成器。通过这种方式,我们可以在ph

PHP小编柚子带来了一篇关于通道实现的python风格生成器的文章。在这篇文章中,我们将介绍过早阅读的概念,以及如何使用通道来实现Python风格的生成器。通过这种方式,我们可以在php中使用类似于Python中的生成器语法,提供更加灵活和高效的编程体验。无论你是PHP开发者还是对生成器感兴趣的人,这篇文章都会为你提供有价值的知识和实用的技巧。让我们一起来探索这个有趣的主题吧!

问题内容

我尝试使用以下通道实现 Python 风格的生成器:

package main

import (
    "fmt"
)

type ContainerIterable[T any] struct {
    content []T
}

func NewContainerIterable[T any]() *ContainerIterable[T] {
    return &ContainerIterable[T]{content: make([]T, 0)}
}

func (c *ContainerIterable[T]) Iterate() chan T {
    ch := make(chan T)
    Go func() {
        for _, v := range c.content {
            ch <- v
        }
        close(ch)
    }()
    return ch
}

func (c *ContainerIterable[T]) Add(e T) {
    c.content = append(c.content, e)
}

func main() {
    c := NewContainerIterable[int]()

    for i := 0; i < 5; i++ {
        c.Add(i)
    }

    r := make([]int, 0)
    for v := range c.Iterate() {
        r = append(r, v)
    }

    for i := 0; i < 5; i++ {
        fmt.Println(i, r[i], i == r[i])
    }
}

这工作得很好,输出是

0 0 true
1 1 true
2 2 true
3 3 true
4 4 true

但是,当我改变

r := make([]int, 0)

r := make([]int, 5)

结果不同:

0 0 true
1 0 false
2 0 false
3 0 false
4 0 false

我知道在第二种情况下 c.Iterate() 之前开始从通道读取

go func() {
        for _, v := range c.content {
            ch <- v
        }

有机会向频道发送任何内容。 这不适用于第一种情况,因为当调用 append() 时,main() goroutine 需要一些时间来为 r 切片重新分配空间。

请告知如何调整我的代码以使 Iterate() 正常工作?

解决方法

这个:

r := make([]int, 5)

将初始化一个包含 5 个元素的切片,全部为 0。然后您将再向其中添加 5 个元素。您的程序正在读取前 5 个零元素。

使用:r:=make([]int,0,5)

以上就是作为通道实现的 Python 风格生成器:过早阅读的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 作为通道实现的 Python 风格生成器:过早阅读

本文链接: https://lsjlt.com/news/562200.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 作为通道实现的 Python 风格生成器:过早阅读
    php小编柚子带来了一篇关于通道实现的Python风格生成器的文章。在这篇文章中,我们将介绍过早阅读的概念,以及如何使用通道来实现Python风格的生成器。通过这种方式,我们可以在PH...
    99+
    2024-02-09
  • Python Prim算法通过遍历墙实现迷宫的生成
    之前,我们在另外一篇文章中使用Prim算法生成了一个完美迷宫,利用的是遍历网格的方法,这一次,我们要教教大家用遍历墙的方法生成,上一篇文章链接:Python利用Prim算法生成迷宫 ...
    99+
    2023-01-06
    Python Prim生成迷宫 Python生成迷宫 Python Prim算法
  • 怎么在python中通过函数形式实现一个生成器
    本篇文章给大家分享的是有关怎么在python中通过函数形式实现一个生成器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许...
    99+
    2023-06-14
  • 基于Redis作为发号器生成短网址Python实践是怎样的
    这篇文章将为大家详细讲解有关基于Redis作为发号器生成短网址Python实践是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。描述如何将长地址URL转换为短地址URL,一个比较理想的解...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作