之前用 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
正文完