如何使用Python进行大规模开发?

如何使用Python进行大规模开发?,python,development-environment,Python,Development Environment,我很想了解Python的大规模开发,尤其是如何维护大型代码库 当您对方法的签名进行不兼容更改时,如何找到调用该方法的所有位置。在C++/Java中,编译器会为您找到它,您如何在Python中找到它 当您在代码的深处进行更改时,由于没有要查找的静态类型,如何找出实例提供的操作 你如何处理/防止打字错误 UnitTest是否用作静态类型检查的替代品 您可以猜到,我几乎只使用静态类型语言(C++/Java),但我想尝试使用Python来实现更大的程序。但是很久以前,我在使用clipper(dBas

我很想了解Python的大规模开发,尤其是如何维护大型代码库

  • 当您对方法的签名进行不兼容更改时,如何找到调用该方法的所有位置。在C++/Java中,编译器会为您找到它,您如何在Python中找到它

  • 当您在代码的深处进行更改时,由于没有要查找的静态类型,如何找出实例提供的操作

  • 你如何处理/防止打字错误

  • UnitTest是否用作静态类型检查的替代品

您可以猜到,我几乎只使用静态类型语言(C++/Java),但我想尝试使用Python来实现更大的程序。但是很久以前,我在使用clipper(dBase)语言时有一次非常糟糕的经历,这种语言也是动态输入的。

我的0.10欧元:

我有几个python应用程序处于“生产”状态。我公司使用java、C++和Python。我们使用EclipseIDE(PydevforPython)开发

<强> UNITSATE是问题的关键解决方案。>(也适用于C++和java)

不太安全的“动态键入”世界将使您对代码质量不那么粗心

顺便说一下:

大规模开发并不意味着你只使用一种语言

大规模开发通常使用一些特定于问题的语言

所以我同意锤子问题:-)



PS:

我有一些修改开放源码python“吉他英雄”克隆版“着火的烦恼”的经验

在我看来,python并不真正适合于真正大规模的项目

我发现自己在开发时花了很大一部分时间调试与不兼容类型的分配相关的问题,而静态类型语言将在编译时毫不费力地揭示这些问题。 此外,由于类型是在运行时确定的,因此理解现有代码变得更加困难,因为您不知道当前正在查看的参数的类型

除此之外,在Python中使用内置函数
\uuu getattr\uuuu
的名称字符串调用函数通常比在其他编程语言中更为常见,因此要获得某个函数的调用图有点困难(尽管在某些静态类型语言中也可以使用其名称调用函数)


我认为Python在小规模软件、快速原型开发和将现有程序粘合在一起方面确实非常出色,但我不会将其用于大型软件项目,因为在这些类型的程序中,可维护性成为真正的问题,在我看来,python在这方面相对较弱。

通常的答案是测试。您应该有一个广泛的单元测试套件并经常运行它,尤其是在新版本上线之前

动态类型语言的支持者认为无论如何都必须进行测试,因为即使在静态类型语言中,与类型系统的粗略规则的一致性也只涵盖了可能出错的一小部分。

不要将螺丝刀用作锤子 Python不是一种静态类型的语言,所以不要试图以这种方式使用它

当你使用一个特定的工具时,你会用它来完成它的构建。对于Python,它意味着:

  • 鸭式键入:不进行类型检查。只有行为才重要。因此,您的代码必须设计为使用此功能。一个好的设计意味着通用的签名,组件之间没有依赖性,高抽象级别。。因此,如果您更改了任何内容,就不必更改代码的其余部分。Python也不会抱怨,因为它是为什么而构建的。类型不是问题

  • 庞大的标准库。如果您使用的标准功能不是您自己编写的,则不需要更改程序中的所有调用。Python自带电池。我每天都在发现它们。当我开始尝试像所有人一样重写现有的东西时,我不知道我可以使用多少个模块。没关系,你不能从一开始就做好

<>你不写java、C++、python、php、Erlang,不管怎样,都是一样的。他们是很好的理由,为什么有这么多不同语言的空间,他们不做同样的事情

单元测试不是替代品 单元测试必须使用任何语言进行。最著名的单元测试库()来自Java世界

这与类型无关。再次检查行为。你可以避免回归带来的麻烦。你要确保你的客户你走上正轨

大型项目的Python 语言、图书馆和框架 不要缩放。架构就是这样

如果你设计了一个坚实的架构,如果你能让它快速发展,那么它就会扩展。单元测试帮助,以及自动代码检查。但它们只是安全网。还有小的

Python特别适合于大型项目,因为它强制实施了一些良好的实践,并且内置了许多常用的设计模式。但同样,不要把它用于它没有设计的东西。例如:Python不是用于CPU密集型任务的技术

在一个巨大的项目中,你很可能会使用几种不同的技术。作为(法语)和模板语言,否则。Python也不例外

您可能希望在代码中使用C/C++来加快速度。或Java以适应环境。不知道,不在乎。Python可以很好地处理这些问题

作为结论 我的回答可能有点粗鲁,但不要误解我的意思:这是一个非常好的问题

很多人带着旧习惯来到Python。我试图像Python一样编写Java代码,结果弄砸了自己。你
  >>> x= SomeClass()
  >>> dir(x)
class MyClass { }
class MyClassx extends MyClass { }