大家好! 作为
Python开发人员课程的一部分
,我们还举办了另一主题为“如何用Python编写”的公开课。 该课程由该课程的老师和创建者
Stanislav Stupnikov教授 ,他在工业和科学发展方面拥有丰富的经验。 考虑了您需要了解的编程习惯,不良行为和其他弊端,在编写代码的过程中应避免这种情况。
有关详细信息,请参见视频和摘要。 警告:不建议在您的计算机上运行某些代码示例!
在公开课中,老师展示了Jupyter Notebook生成的幻灯片。
因此,让我们开始吧!
那么为什么不用Python编写呢?
为了方便提交材料,准备了一系列在编程过程中不应该使用的技术。 每个示例均附有清晰的代码示例(可免费观看视频)。 我们简要描述主要的反模式:
- 尿布图案。 这是关于所谓的“尿布”模式,通常意味着尝试范围太广。 例如,您调用的函数是某些东西的包装器,例如,它包装了某些数据库的客户端库。 在一个好的情况下(系统很小),在99%的情况下一切都会好起来,但是,如果系统很大,那么问题的概率就不会以最佳方式相乘。 结果,某些东西不断掉落或破裂。
- 反全球主义。 每个人都知道,全局变量的效率很低,除非在某些特殊情况下。 最好以属性的形式将所有内容传递给函数等,以实现所需的结果。 但是,有些人提出了一个“好主意”-使用可变对象。 它包括将不可变的对象,而是可变的对象传递给函数,然后在内部对其进行更改,然后不返回任何内容。 太酷了!)实际上,一部分来自C语言的编程模板已转移到Python世界。
- 通往天堂的阶梯。 您可能已经猜到,这是“通往天堂的阶梯”。 用一个简单的图来最好地说明这个问题:

- Javatar。 那些由于某种原因从Java转换为Python的程序员通常会犯此计划的错误。 自然,它们带有自己的章程,因此它们违反了Python开发规则。 这是疯狂的缩进和CamelCase的出现,以及创建更多类的渴望。结果,代码的结构变得更加复杂。 在可以免除300行大小的脚本的地方,我们看到10-20个文件。
- 工程过度。 很多时候,项目的第二次迭代可能永远不会完成或以太复杂的方式实现。 如果您要重写现有但有缺陷的代码,使其成为理想代码,则会发生这种情况。 同时,您忘记了最好是善的敌人。 结果,当实现变得比解决任务所必需的更加昂贵,繁重和麻烦时,程序员陷入了重新设计的标准陷阱。 实际上,家庭轿车是否应该达到最高时速350 km / h的速度,并且智能手机(这种时尚每年都在变化)能工作100年?
- Oneliner 另一个紧急问题是“单线”。 它是关于那些正在以令人羡慕的热情将所有东西推到一条线,五层广告中的程序员)。 由于代码过于复杂并且在Python中实现了机器正则表达式的特殊性,此类脚本有时会“坚持”进行解析,因此您必须使用特殊的模块来解决问题。
- 读取时复制。 这并不是Python编程的一个功能,而是一个错误。 许多人都熟悉写时复制方法。 他的想法是,当读取数据区域时,将使用共享副本,而在更改时,将创建一个新副本,也就是说,我们正在谈论优化性能流程。 如果我们谈论Python,在某些情况下,我们不只是读取元素数组,而是引用内存中的所有底层结构,也就是说,我们“重写”内存以进行更改。 因此,当我们似乎正在读取内存时,我们会得到“读取时复制”,而不是“写入时复制”,但是,实际上,我们必须将此信息作为一个子进程从父空间复制到我们自己,这使我们很遗憾。优化无效,并且消耗量不断增长。
- 没有叉子。 分支-克隆新过程的出现。 该问题与使用Unix系统的细节以及在实现中隐藏的某些数据结构的不明显有关。 “分叉”进程是从线程捕获队列中的日志以将其放入其中时开始的进程。 也就是说,已经出现的新进程也想要写一些东西,但是为此,他需要从此队列本身中获取日志,但是由于已经捕获了日志,因此他不能这样做。 结果,我们得到了锁。 所有这一切仅一次又一次证明了不值得进行编程,不知道您所工作的环境的实现功能和所使用的工具。
还有很多有趣的事情,所以最好观看视频,因为 重排仍然很短。
与往常一样,我们正在这里或在
敞开的门口等待问题,评论和建议。