最近,一组用于计算分析的Python脚本中的一个编程错误可能会导致150篇已发表的化学研究论文作废,而造成这种差异性的罪魁祸首是该脚本使用了Python的glob模块......
python学习裙:10667510,最全学习资料,萌新程序员大本营
以下为译文:
最近,一组用于计算分析的Python脚本中的一个编程错误可能会导致150篇已发表的化学研究论文作废。
夏威夷大学在最近发表的一篇研究论文中揭示了这个名为Willoughby-Hoye脚本中的一处编程错误。
研究人员在尝试检查蓝细菌实验的结果时,在类似的核磁共振波谱(Nuclear Magnetic Resonance Spectroscopy,NMR)数据上观测到了显著的变化。
该错误是否会出现取决于运行脚本的操作系统。人们发现这些脚本在Windows 10和macOS Mavericks上可以提供准确的结果,但在macOS Mojave和Ubuntu上却几乎百分之百会产生不准确的结果。
造成这种差异性的罪魁祸首是该脚本使用了Python的glob模块。
该脚本利用glob模块查找与特定名称模式相对应的文件,并根据glob的结果生成需要读取的输入文件列表。
然而,该模块的输出依赖于操作系统排序和返回这些文件的方式,而处理文件的顺序会影响这些脚本的计算结果。
由于输出不准确,这个细节问题可能会导致许多之前的研究论文作废。
Phillip Williams和Rui Sun修复了代码中正确排序的问题,如今可以保证结果的一致性了。尽管这些变化没有对夏威夷大学团队获得的数据造成任何影响,但可能会对其他已发表的研究项目产生实质性的影响。
Willoughby-Hoye脚本的名字来自其作者明尼苏达大学的Patrick Willoughby和Thomas Hoye。
目前Patrick Willoughby是瑞普大学化学系的助理教授,他表示认可脚本中的问题以及修复。他在推特上公开了脚本的更新:
“感谢Rui和Williams教授发现了这个问题。六年前,当我编写脚本时,操作系统能够正确处理排序。Rui和Williams添加的排序代码很有必要,而且他们还添加了一个函数以确保计算无误。辛苦了!”
—— Patrick Willoughby
有时,即便是信得过的外部脚本和库也有可能导致意外结果。
下面,再补充三则最新的Python小故事。
故事1:Salesforce的“爱因斯坦分析”抛弃Python,改用Google的Go语言
Salesforce将利用Google的Go语言来代替“爱因斯坦分析”中的C和Python。
为了强化“爱因斯坦分析”平台,Salesforce向分析公司Tableau投入了157亿美元,很明显他们认为分析对公司的未来发展有着举足轻重的影响。
2017年,在推出“爱因斯坦分析”之前,Salesforce就曾利用Google Golang重新构建了后端。
Salesforce首席架构师Guillaume Le Stum指出,考虑到数据集创建工具和查询引擎的性能,他们在“爱因斯坦分析”的创建中选择了C语言,并提供了Python的封装,以提供了REST API服务器、解析查询等其他功能。
Le Stum在Stack Overflow的帖子中说:
“从本质上讲,该产品兼顾了两种语言的优点。
Python非常适合快速编写高级应用程序,但无法提供企业级别所需的高性能。而C可以创建高性能的可执行文件,但是用C添加新功能需要很多时间。”
然而,在发布前,Le Stum表示由于添加了不属于核心查询引擎的新功能,该平台的性能有所下降。因此,再加上该平台的开发和部署等新功能,Salesforce可能仍在考虑长期计划。
Le Stum补充说:“ Python无法顺利地执行多线程,因此,Python封装部分使用得越多,执行效率就越差。
相比之下,Go适用于Google生产系统级别的大型应用程序,这也是Salesforce决定从C-Python的混合平台转换到Go的原因。
Le Stum进一步强调了Go的优势,其中包括Go的内置工具、易于排除故障、快速的编译和部署,以及代码更易于理解。
Le Stum指出,在企业软件中,工程师花费在阅读代码上的时间超过了编程的时间。
话虽如此,事实证明采用Go语言让Salesforce得到了进一步的发展,该平台的Go语言版在2018年得到了普及。Go语言最大的优势就在于Go的跨平台功能,可以轻松地移植代码。
Le Stum指出:“如果我们需要将在移动应用程序中使用任何代码,则只需直接将代码编译到iOS或Android即可。”
“爱因斯坦分析”平台中唯一没有采用Go编写的是集群管理器,这部分是用Java编写的。
故事2:微软推出了免费的Python课程
最近,微软在YouTube上发布了“Python入门教程”的系列视频,该系列视的目标是教授Python的基础知识。
Susan Ibach和Christopher Harrison担任了这个系列的讲师。Susan是微软AI游戏部门的业务开发经理,而Christopher目前是微软的高级程序经理。
微软表示:
“尽管该课程无法涵盖所有的Python知识,但我们希望从常见的代码和场景出发,为程序员讲解Python编程的基础知识。 ”
该课程分为44个部分,重点讲解了Python 3.X版本的编程,主要针对拥有JavaScript基本知识或参加过某种形式的可视化编程语言的观众。
该课程提供的教学视频长度在3-10分钟,包括Visual Studio Code的配置、处理循环和执行错误处理等功能。
此外,微软还在视频中提供了幻灯片和编程示例等一系列补充资源。
ZDNet的报告强调,对微软来说,拥有庞大的Python开发群会受益无穷,因为这些开发人员可以将Python应用到微软Azure Machine Learning Studio的应用程序构建中。
故事3:Python 3.8推出了Walrus运算符,且仅支持位置参数
最近Python发布了最新版本Python 3.8,该版本引入了一些新功能和改进。十月初,Python团队发布了Python 3.8b2版,这是四个计划beta版本中的第二个。
Python 3.8新增了哪些功能?
从各个方面来看,Python 3.8的新增功能非常吸引人。其中有些新功能尤其值得注意:
-
新增的函数形参语法(PEP 570)
-
新的Walrus运算符(PEP 572)
-
Pickle协议5 引入了对外部缓冲区的支持(PEP 574)
-
已验证开放钩子和审核钩子(PEP 578)
-
增加了一个新的 C API 用来配置Python初始化(PEP587)
-
支持Vectorcall(PEP 590)
此外,还有一个值得一提的新功能:
-
格式化的字符串(f-strings)引入的=指示符,新的元数据模块(importlib.metadata)以及并行文件系统缓存。
有关Python 3.8中其他模块的改进、添加和删除,请参照Python文档;完整的详细信息,请参照Python更新日志。