避雷:Python脚本里的小错误,可能导致150多个研究项目作废

全文共3297字,预计学习时长10分钟

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

图源:Unsplash

千里之堤,溃于蚁泬。

Python 脚本集中的一个编码错误,可能会导致150篇已发表的研究报告集体报废。

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

这不是危言耸听。

夏威夷大学最近发表的一篇研究文章,就揭示了Willoughby-Hoye脚本里的一个编程错误,推翻了一波论文和研究成果。

这些研究人员试图检验从蓝藻实验中得到的结果,但在几次使用相似核磁共振光谱(NMR)数据的情况下,却得到了差异极大的结果。

这个错误是基于脚本运行的操作系统传播的。在 macOSMavericks 和 Windows 10 上运行该脚本都能得到准确的结果,但在 macOSMojave 和 Ubuntu 上运行时,却出现了和正确结果将近1个百分点的差异。

差异的来源是脚本对Python中glob模块的使用。

该模块会查找符合特定规则的文件路径名,然后基于glob运行结果,来生成读取文件列表。

但之后,glob的输出值就取决于排序和返回这些文件的操作系统了。也就是说,处理文件的顺序会影响到脚本的计算结果。

如此细微的一个偏差可能使很多珍贵的研究文章失去意义,因为它们得到的结果是不精确的。

夏威夷大学的 Rui Sun和 Phillip Williams 编写了能够解决这个问题的排序校正代码,以保证结果的一致性。尽管这一差异并未影响到夏威夷大学的研究结果,但对于其他有些已发表的研究项目则可能有较大影响。

Willoughby-Hoye脚本得名于其作者,Patrick Willoughby 和Thomas Hoye,他们来自于明尼苏达大学。

PatrickWilloughby目前是Ripon College的助理教授,他在代码中增加了新的内容,同时也对脚本进行了更正。他在Twitter中发布了这一更新消息:

“非常感谢Rui和Williams教授的发现。我六年前写这个脚本的时候,OS系统还是能够处理这个排序问题的。感谢Rui和Williams添加了必要的排序校正代码,和一个确保calcs有序排列的函数。赞!”——Patrick Willoughby (@pat_willoughby)

有时候,盲目相信外界的脚本和库可能会引发意想不到的结果。

所以,多相信自己一些,另外,别偷懒。(手动狗头)

程序员不仅需要过硬的实操技能,还需要敏锐的信息获取能力,双耳不闻窗外事的后果,真的很惨……

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

图源:pexels

接下来,小芯就为你整理了,三个你绝对不能错过的,关于Python新鲜出炉的报道。

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

报道1:Salesforce*的‘爱因斯坦分析(EinsteinAnalytics)’平台将编程语言由Python改为谷歌Go语言

*Salesforce是创建于1999年3月的一家客户关系管理(CRM) 软件服务提供商。

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

来源:Unsplash

Salesforce将要用谷歌Go编程语言,来取代爱因斯坦分析中的C语言和Python。

分析公司 Tableau花费超过157亿美元用于增强爱因斯坦分析平台,很明显Salesforce 认为分析是其未来发展的重要方向。

2017年,在爱因斯坦分析推出之前,Salesforce使用谷歌Go语言对其后端进行了全面改造和重建。

Salesforce首席设计师Guillaume Le Stum指出,数据集创建工具和搜索引擎的存在,能够让爱因斯坦分析用C语言完善性能。此外,Python包装器还提供其他功能,如 REST API 服务器、解析查询等。

Le Stum在Stack Overflow上发表的文章中说到:

“本质上,这个产品汲取了两种语言的精华。Python 非常适合快速编写高级应用程序,但并不能总是提供企业所需的高性能。C语言则能创建高性能的可执行文件,但是在其中添加特性需要花费更多的时间。”

但是在发布之前,Le Stum提到这个平台的性能部分走低,因为新增加了一些本不属于核心搜索引擎的功能。所以,尽管Salesforce有能力开发和部署这些新功能,但长远看来它们还需要改进。

Le Stum还补充: “Python不能很好地执行多线程任务,所以包装器被要求执行的任务越多,它的执行效果就越差。”

相比之下,Go语言更适应谷歌生产系统下的大型应用程序,这可能也是Salesforce由C-Python混合语言向Go平台转变的原因。

Le Stum进一步强调了Go语言的优点:强大的内置工具、便捷的故障排除过程、快速编译时间、高效的任务部署,以及易于理解的编码方法。

他还指出,在企业软件中,工程师花在修正代码上的时间比写代码的时间要多的多。

然而在2018年,随着Go平台普及和推广,用Go语言所写的概念能够让Salesforce更好地提升性能。Go语言最大的优点是跨平台编写,这让代码移植变得更容易。

“如果我们在移动应用程序中要用到这些代码,我们可以将它们交叉编译到苹果或安卓系统上,然后就可以直接使用了。”Le Stum提到。

爱因斯坦分析平台中唯一没有用Go语言编写的部分是集群管理器,它使用的是 Java。

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

报道2:微软推出免费的Python编程课程

微软最近发布了一个YouTube系列视频:适合初学者的Python。这个系列旨在帮助有抱负的程序员掌握Python基础知识。

SusanIbach和Christopher Harrison也将主持这个系列节目。Susan是微软AI游戏部门的业务开发经理之一,而Christopher目前是微软的高级项目经理。

微软表示:“尽管课程不会涵盖Python的所有相关知识,但我们希望能从日常的代码和使用场景开始,提供Python编程的基础知识。”

课程共分为44个部分,重点讲解Python 的3.X 版本。该课程针对的是懂得一些基本JavaScript知识,或曾参与某种形式的可视化编程语言的人群。

视频的长度3到10分钟不等,讲解内容包括如何配置Visual Studio Code,怎样处理循环,和执行错误处理的方法等。

此外,微软还会发布一系列附加资源。这些资源将包括幻灯片和编码示例。

来自ZDNet的报告中强调,微软可能会从其更多优秀的Python开发人员中受益,他们可以将Python 应用到 Azure 机器学习工作室中构建应用程序。

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

报道3:Python3.8使用Walrus操作符功能已上线,支持位置唯一参数

最近,Python 发布了最新版本——Python 3.8,有了一些新的特性和改进。10月初,Python团队公布了Python 3.8b2的发行版,这是四个测试版中的第二个。

Python3.8新增了哪些功能?

Python3.8的新增部分在各个方面都很吸引人。包括一些值得注意的改进:

  • 新的函数参数(PEP*570)。
  • 新的Walrus操作符(PEP 572)。
  • 支持Pickle协议5带外数据缓冲区(PEP574)。
  • 已验证的开放钩子和审计钩子(PEP578)。
  • 配置初始化Python的新C API (PEP587)。
  • 向Vectorcall提供支持(PEP 590)。

*PythonEnhancement Proposals的缩写,Python增强提案。

其他值得一提的新增内容包括:

格式化的字符串(f-strings),如a = specifier,新的元数据模块(importlib.metadata)和并行文件系统缓存。

你可以在Python docs中看到新版Python 3.8其他改进、新增和删除的模块。

希望大家能成为更棒的程序员~

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

避雷:Python脚本里的小错误,可能导致150多个研究项目作废

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐