iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python开发者在转到Go语言之前需要了解什么
  • 475
分享到

Python开发者在转到Go语言之前需要了解什么

2024-04-02 19:04:59 475人浏览 八月长安

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

摘要

这期内容当中小编将会给大家带来有关python开发者在转到Go语言之前需要了解什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景在Repustate,我们完成过的最棒

这期内容当中小编将会给大家带来有关python开发者在转到Go语言之前需要了解什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

背景

在Repustate,我们完成过的最棒的技术成就之一是实现了阿拉伯语的情感分析。阿拉伯语是一块难啃的硬骨头,因为它的词形变化相当复杂。比起譬如英语,阿拉伯语的分词(将一个句子切分呈几个独立的单词)也更困难,因为阿拉伯语的单词本身还可能会包含空白字符(例如:“阿列夫”在一个单词里的位置)。这也谈不上是泄密,Repustate 使用支持向量机(SVM)来获取一个句子背后最有可能的含义,并在其中加上情感元素。 总体上来说,我们使用了 22 种模型(22 个 SVM) 并且在一篇文档中,每一个单词我们都会加以分析。因此如果你有一篇 500 字的文档,那么基于 SVM,会进行十万次的比较。

Python

Repustate 几乎完全就是一个python 商店。我们使用Django来实现 api 和网站。因此(目前)为了保持代码一致,同时使用 Python 来实现阿拉伯语情感引擎是合情合理的。只是做原型和实现的话,Python 是很好的选择。它的表达能力很强悍,第三方类库等等也很好。如果你就是为了WEB服务,Python 很***。但是当你进行低级别的计算,大量依赖于哈希表(Python 里的字典类型)做比较的时候,一切都变慢了。我们每秒能处理大约两到三个阿拉伯文档,但是这太慢了。比较下来,我们的英语情感引擎每秒能处理大约五百份文档。

瓶颈

因此我们开启了Python 分析器,开始调查是什么地方用了那么长时间。还记得我前面说过我们有 22 个 SVM 并且每个单词都需要经过处理吗?好吧,这些都是线性处理的,非并行处理。所以我们的***反应是把线性处理改成 map/reduce 那样的操作。简单来说:Python 不太适合用作 map/reduce。当你需要并发的时候,Python 算上好用。在 2013 Python 大会上(译者:PyCon 2013),Guido 谈到了 Tulip,他的这个新项目正在弥补 Python 这方面的不足,不过得过段一段时间才能推出,但是如果已经有了更好用的东西,我们为什么还要等呢?

选Go 语言,还是回家算了?

我在Mozilla的朋友告诉我,Mozilla 内部正在将他们大量的基础日志架构切换到 Go 语言上,部分原因是因为强大的 [编程语言是如何工作(解释型 vs 编译型, 动态语言 vs 静态语言)有一点理解的话,会说,“切,当然 Go 语言会更快”。是的,我们也可以用 Java 把所有的东西重写一遍,也能看到类似更快的改善,但那不是 Go 语言胜出的原因。你用 Go 写的代码好像就是对的。我搞不清楚到底是怎么回事,但是一旦代码被编译了(编译速度很快),你就会觉得这代码能工作(不只是跑起来不会错,而且甚至逻辑上也是对的)。我知道,这听上去不太靠谱,但是确实如此。这和 Python 在冗余(或非冗余)方面非常类似,它把函数作为***目标,因此函数编程会很容易想明白。而且当然,go 线程和通道让你的生活更容易,你可以得到静态类型带来的性能大提升,还能更精细的控制内存分配,而你却不必为此在语言表达力上付出太多的代价。

希望能早点知道的事情(Tips & Tricks)

除去所有这些赞美之词以后,有时你真的需要在处理 Go 代码的时候,相对于 Python,改变一下思维方式。因此这是我在迁移代码时记录的笔记清单 —— 只是在我把 Python 代码转换到 Go 时从我脑子里随机冒出来的点子:

◆ 没有内建的集合类型(必须使用map,并检查是否存在)

◆ 因为没有集合,必须自己写交集,并集之类的方法

◆ 没有 tuples 类型,必须写你自己的结构,或者使用 slices (即数组

◆ 没有类似 \__getattr__() 的方法,你必须总是检查存在性,而不是设置默认值,例如,在 Python 里,你可以这样写 value = dict.get(“a_key”, “default_value”)

◆ 必须总是检查错误(或者显式的忽略错误)

◆ 不能有变量/包没被使用,因此简单的测试也需要有时注掉一些代码

◆ 在 [] byte 和 string 之间转换。 regexp 使用 [] byte (不可变)。这是对的,但是老把一些变量转换来转换去很烦人

◆ Python 更宽松。你可以使用超出范围的索引字符串里取一个片段,而且不会出错。你还可以用负数取出片段,但是 Go 不行

◆ 你不能混合数据结构类型。也许这样也不太干净,但是有时在 Python 里,我会使用值是混合了字符串和列表的字典。但是 Go 不行,你不得不清理干净你的数据结构或者使用自定义的结构

◆ 不能解包一个 tuple 或者 list 到几个不同的变量(例如:x, y, z = [1, 2, 3])

◆ 驼峰式命名风格(如果你没有首字大写方法名/结构名,他们不会被暴露给其它的包)。我更喜欢 Python 的小写字母加下划线命名风格。

◆ 必须显式检查是否有错误 != nil, 不像在 Python 里,许多类型可以像 bool 那样检查 (0, “”, None 都可以被解释成 “非” 集合)

◆ 文档在一些模块上太散乱了,例如(crypto/md5),但是 IRC 上的 go-nuts 很好用,提供了巨大的帮助。

◆ 从数字到字符串的转换(int64 -> string) 和 []byte -> string (只要使用 string([]byte))不太一样。需要使用 strconv。

◆ 阅读 Go 代码比起 Python 那样写起来如伪代码的语言更像一门编程语言, Go 有更多的非字母数字字符,并且使用 || 和 &&, 而不是 “or”和“and”

◆ 写一个文件的话,有 File.Write([]byte) 和 File.WriteString(string), 这点和 Python 开发者的 Python 之道:“解决问题就一种方法 ”相违背。

◆ 修改字符串很困难,必须经常重排 fmt.Sprintf

◆ 没有构造函数,因此惯用法是创建 NewType() 方法来返回你要的结构

◆ Else (或者 else if)必须正确格式化,else 得和 if 配对的大括号在同一行。奇怪。

◆ 赋值运算符取决于在函数内还是函数外,例如,= 和 :=

◆ 如果我只想要“键”或者只想要 “值”,譬如: dict.keys() 或者 dict.values(),或者一个 tuples 的列表,例如:dict.items(),在 Go 语言里没有等价的东西,你只能自己枚举 map 来构造你的列表类型

◆ 我有时使用一种习惯用法:构造一个值是函数的字典类型,我想通过给定的键值调用这些函数,你在 Go 里可以做到,但是所有的函数必须接受,返回相同的东西,例如:相同的方法签名

◆ 如果你使用 JSON 并且 你的 jsON 是一个复合类型,恭喜你。 你必须构造自定义的结构匹配 JSON 块里的格式,然后把原始 JSON 解析到你自定义结构的实例中去。比起 Python 世界里 object = json.loads(json_blob) 要做更多的工作

是不是值得?

值得,一百万倍的值得。速度的提升太多了,以致很难舍弃。同时,我认为, Go 是目前趋势所在,因此在招新员工的时候,我认为把 Go 当作 Repustate 技术积累的重要一环会很有帮助。

上述就是小编为大家分享的Python开发者在转到Go语言之前需要了解什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网Python频道。

--结束END--

本文标题: Python开发者在转到Go语言之前需要了解什么

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python开发者在转到Go语言之前需要了解什么
    这期内容当中小编将会给大家带来有关Python开发者在转到Go语言之前需要了解什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景在Repustate,我们完成过的最棒...
    99+
    2022-10-19
  • Spring 索引教程:Go 语言开发者需要了解的关键知识点是什么?
    Spring 是一个流行的 Java 开发框架,它为开发者提供了许多方便的功能和工具。其中,Spring 索引是一个非常有用的工具,它可以帮助开发者更快速地搜索和访问数据。本文将向 Go 语言开发者介绍 Spring 索引的关键知识点,并...
    99+
    2023-10-19
    索引 教程 spring
  • 自然语言处理和容器技术:Go语言开发者需要了解的关键点是什么?
    随着人工智能技术的不断发展,自然语言处理已经成为了一个热门话题。自然语言处理(NLP)是指一系列技术,它们可以分析、理解和生成人类语言。随着容器技术的不断发展,Go语言开发者需要了解的关键点是什么? 容器技术是一种虚拟化技术,它可以在同一...
    99+
    2023-10-06
    自然语言处理 容器 实时
  • 爬虫开发之前需要先了解什么专业知识
    这篇文章主要介绍爬虫开发之前需要先了解什么专业知识,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、HTTP的基本原理。从客户端到服务器,可以分为四个部分:请求方法(RequestMethon)、请求网站(Resqu...
    99+
    2023-06-20
  • 为什么 Python 开发者都需要了解容器和索引?
    Python 是一种高级编程语言,它已经成为了许多开发者的首选。然而,即使是 Python 开发者,也需要了解容器和索引,因为它们在编程中扮演着至关重要的角色。本文将详细介绍容器和索引,以及它们在 Python 开发中的应用。 一、容器 在...
    99+
    2023-09-21
    容器 ide 索引
  • 从Laravel到Go:为什么开发人员正在转向新的编程语言?
    随着技术的不断发展,编程语言也在不断地演进。在过去的几年中,我们看到了一些新的编程语言的出现,比如Go。尽管像PHP和Python这样的语言仍然很受欢迎,但越来越多的开发人员转向使用Go。那么,为什么开发人员正在转向新的编程语言?本文将从L...
    99+
    2023-09-14
    django git laravel
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作