Golang中的通道 VS Python中的生成器

328次阅读
没有评论
Golang 中的通道 VS Python 中的生成器

之前用 python 的时候

发现 python 中的生成器特别好用

特别是上一个结果传递给下一个函数的时候

感觉一个 yield 就能解决一切

尤其是如果结果还特别大

当时就在想

有它谁还用列表呀

知道后来看 Go 语言

发现了一个叫通道的东西

golang 中没有生成器

可以用通道的方式去实现生成器的功能

第一次见的时候我就在想

这个不就是生成器吗

简直一模一样

但是好像又不太一样

使用场景比生成器更灵活才对

真的是学无止境

是我以前局限了

举两个例子

同样的程序分别去用 python 和 golang 去实现

# 首先是一段 python 的代码,gen 函数使用生成器,main 函数去消耗生成器产生的数组

def gen():
    for i in range(100):
        yield i

def main():
    for i in gen():
        print(i)

if __name__ == "__main__":
    main()

# 然后是用 go 语言的通道去实现了一段代码,通道在代码中实现了和生成器一样的功能

package main

import "fmt"

func gen(ch chan int) {
	for i := 0; i < 100; i++ {ch <- i}
	close(ch)
}

func main() {ch := make(chan int)
	go gen(ch)
	for i := range ch {fmt.Println(i)
	}
}

写完之后,我甚至还去比了一下他们的速度

我把遍历的数从 100 改成了 100000

测试前,我原本以为 go 语言会比 python 语言快很多

因为这也确实是一直被人灌输的一种观念

或许是我的代码太过简单

两种代码从底层没有相差太多

测试结果出来后

我发现,go 语言并没有比 python 快太多

因为是运行了多次

速度相差不大

而且 go 语言似乎发挥的不太稳定

有时会被 python 反超

所以,安心学 python 吧!少年

速度慢不是你放弃 python 的理由

附上 python 最快速度

 Measure-Command {python testyiled.py}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 510
Ticks             : 5104329
TotalDays         : 5.90778819444444E-06
TotalHours        : 0.000141786916666667
TotalMinutes      : 0.008507215
TotalSeconds      : 0.5104329
TotalMilliseconds : 510.4329

go 语言最快速度

Measure-Command {./main.exe}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 490
Ticks             : 4900346
TotalDays         : 5.67169675925926E-06
TotalHours        : 0.000136120722222222
TotalMinutes      : 0.00816724333333333
TotalSeconds      : 0.4900346
TotalMilliseconds : 490.0346

python 最慢速度

Measure-Command {python testyiled.py}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 571
Ticks             : 5718062
TotalDays         : 6.61812731481481E-06
TotalHours        : 0.000158835055555556
TotalMinutes      : 0.00953010333333333
TotalSeconds      : 0.5718062
TotalMilliseconds : 571.8062

go 语言最慢速度

 Measure-Command {./main.exe}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 541
Ticks             : 5415868
TotalDays         : 6.26836574074074E-06
TotalHours        : 0.000150440777777778
TotalMinutes      : 0.00902644666666667
TotalSeconds      : 0.5415868
TotalMilliseconds : 541.5868
正文完
 
评论(没有评论)