Python 的一个脚本错误可能会废掉 150 多个项目!

原文链接: https://bss.csdn.net/m/topic/dev_survey2019?source_id=zx

最近,一组用于计算分析的Python脚本中的一个编程错误可能会导致150篇已发表的化学研究论文作废,而造成这种差异性的罪魁祸首是该脚本使用了Python的glob模块......

Python 的一个脚本错误可能会废掉 150 多个项目!_第1张图片

作者 | SeattleDataGuy

译者 | 弯月,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

最近,一组用于计算分析的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小故事。

 

640?wx_fmt=png

故事1:Salesforce的“爱因斯坦分析”抛弃Python,改用Google的Go语言

 

Python 的一个脚本错误可能会废掉 150 多个项目!_第2张图片

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编写的。

 

640?wx_fmt=png

故事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的应用程序构建中。

 

640?wx_fmt=png

故事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更新日志。

原文:https://medium.com/better-programming/an-error-in-a-python-script-may-have-invalidated-150-research-projects-64fe7cda558c

本文为 CSDN 翻译,转载请注明来源出处。

你可能感兴趣的:(Python 的一个脚本错误可能会废掉 150 多个项目!)