Python作为一种广受欢迎的编程语言,已经发展出了两种相似但又具有根本差异的风格:非类型化Python和类型化Python。这种分化在社区中引发了一些讨论,尤其是关于类型提示的使用。让我们来探讨一下这两种Python风格的特点及其在编程中的应用。
首先,我们来了解一下什么是基础设施代码和业务逻辑代码。基础设施代码,例如Flask、Django ORM、SQLAlchemy等,提供了强大的接口来解决复杂问题,它们是编程的基石。而业务逻辑代码则更多关注日常的问题解决,它直接为用户或雇主提供价值。基础设施代码是我们使用的库,而业务逻辑代码是我们自己编写的代码。
在Python的世界中,非类型化Python通常是编写基础设施代码的首选,因为它提供了灵活性和强大的API。然而,它可能不太适合于业务逻辑代码,因为历史上维护用Python编写的大型系统时常会遇到挑战。
另一方面,类型化Python与业务逻辑代码非常契合。它带来了许多优势,例如将错误从运行时移至类型检查阶段、简化重构过程、提供强大的编辑器支持,并减少了对测试的依赖。
为了使这两种编程风格有效结合,基础设施代码不应在内部使用类型提示,而应该在其边界提供类型提示接口。例如,SQLAlchemy 2.0 和 FastAPI 就是向这个方向发展的例子。随着Python类型系统的成熟,我们可能会看到更多基础设施代码实现完全类型化。
这种分化实际上是一件好事。了解一种(类型化或非类型化的Python),学习另一种会相对容易,这增强了作为软件开发人员的能力。
观察其他语言,如JavaScript和TypeScript之间的关系,以及Java在过去的演变,我们可以看到类似的趋势。Rust则通过其强大的宏系统为基础设施代码提供了有趣的方法,虽然我对此了解有限。
总结来说,类型化Python的引入对Python社区来说是一个积极的发展,而非类型化Python也将继续存在。我们只需根据需求恰当地使用它们,并努力将它们有效地结合起来。