我如何可以使用Python大规模的发展?
-
04-07-2019 - |
题
我将有兴趣了解有关大规模发展蟒蛇,特别是在如何做你保持一个大型代码基地?
当你不相容的变更签名的一种方法,你如何找到所有的地方,在那里,方法是正在叫。C++/Java编译器将会找到它你,你怎么做到在蟒蛇?
当你修改的内心深处的代码,你怎么找出什么样的操作一个实例提供的,因为你没有一个静态型来查找?
你怎么处理/预防的打字错误(打字错误)?
是单元测试的使用,作为替代静态型检查?
你可以猜到我几乎只有静态类型的语文(C++/Java),但我想试试我的手Python对于较大的节目。但我有一个非常糟糕的经验,长时间以前,与帆船(dBase)语言,这也是动态的类型。
解决方案
由于没有人指出pychecker,pylint和类似的工具,我将:pychecker和pylint的工具,可以帮助你找到正确的假设(有关功能签名,目的属性,等等。) 他们不会找到的一切,一个编译器可能会发现在一个静态语言--但它们可以发现问题,这种编译为这些语言可能找不到,太。
蟒蛇(和任何类型的动态语言)是根本的不同方面的错误,你有可能原因和如何,你将检测并解决这些问题。它有一定的负面影响以及好处,但许多人(包括我在内)会认为,在蟒蛇的情况下,便于编写代码(和便于使其结构上的声音)和修改码 没有 破API的兼容性(增加新的可选择的论点,提供不同的对象,有一组相同的方法和属性)使其适合就好了对于大型基本代码.
其他提示
不用螺钉的驱动程序作为一个锤子
蟒蛇不是一个静态语言,因此不要试图用这种方式。
当你使用一个特定的工具,你要用它为什么它已经建立。为蟒蛇,这意味着:
鸭打字 :没有类型的检查。只行为的问题。因此,你的代码必须是设计来使用这一特征。一个好的设计装置通用的签名,没有依赖性之间的部件,高抽象的水平。。所以如果你改变什么,你不会有改变其余的代码。蟒蛇不会抱怨,这是它已经建立。类型不是一个问题。
巨大的标准图书馆.你不需要改变所有你的电话在节目如果使用标准的功能你还没有编码的自己。和蟒蛇来的电池包括在内。我发现他们的日常生活。我没有想法的数量的模块我可以当我开始了,并试图改写现有的东西喜欢每一个人。这是确定的,你不能得到这一切从一开始。
你不写Java、C++、Python,PHP,爱尔兰,什么,同样的方式。他们都是很好的理由为什么有空间用于每个所以许多不同的语言,他们不会做同样的事情。
单元试验不能代替
单元的测试必须执行的任何语言。最着名的单元测试图书馆(JUnit)是从Java world!
这有什么用类型。你检查行为,再次。你避免麻烦,回归。你确保你的客户你的轨道。
蟒蛇的大规模项目
语言、图书馆和框架 不规模。结构做。
如果你设计一个固的架构,如果你能让它演变迅速,那么它将规模。单元测试帮助,代码自动检查。但它们只是安全网。和小家伙。
蟒蛇是特别适用于大型项目,因为它强制执行的某些良好做法和具有很大的通常设计模式的建立。但同样,不要使用它为什么它不是设计。例如:蟒蛇不是一个技术CPU密集型任务。
在一个巨大的项目中,你将最有可能使用几种不同的技术。作为一个 SGBD (法语 DBMS)和一个模板的语言,否则后果不堪设想。蟒蛇是没有例外。
你可能会想到使用C++对于部分代码你需要快。或Java,以适应在一个 Tomcat 环境。不知,不关心。蟒蛇可以发挥的以及与这些。
作为一个结论
我的答案可能会觉得有点粗鲁的,但不要误会我的意思:这是一个非常好的问题。
很多人来到蟒蛇与旧习惯。我搞砸自己的努力,以代码Java像蟒蛇。你可以,但将永远不会得到最好的。
如果你不玩/想要发挥与蟒蛇,这是伟大的!这是一个美妙的工具。但只是一个工具,真的。
我有一些经验与修改"烦恼火",一个开放源蟒"吉他英雄"克隆。
因为我看到它,蟒蛇是不是真适合于一个真正的大规模项目。
我发现自己支出的一大部分的发展时间的调试有关的问题分配的不兼容的类型,事情,静态型种语言将会揭示毫不费力地在编译时间。此外,由于类型确定的运行时间,试图了解现有的代码变得更加困难,因为你不知道什么类型的参数是目前看。
除此之外,叫功能使用他们的名字符串 __getattr__
建立在功能的一般是更常见于蟒蛇,比在其他的编程语言,因此得到调用图到某些功能有点难(虽然你可以打电话的功能与他们的名字在一些静态类型的语言)。
我认为,蟒蛇真正的亮点在小规模的软件,快速原型开发,以及胶合现有的节目一起,但我不会用于大型软件项目,因为在这些类型的程序可维护性成为真正的问题,并在我看蟒是相对较弱。
我0.10欧元:
我有几个python应用于"生产"状态。我们公司使用java、c++和蟒蛇。我们发展与蚀ide(pydev为蟒蛇)
unittests是关键解决方案的问题。 (也是用c++、java)
不太安全的世界的"动态型"会让你不那么粗心大意的有关代码的质量
通过这种方式:
大规模的发展并不意味着,你使用一个单一的语言!
大规模发展中经常使用 少数语言的具体问题.
所以我同意 该锤问题 :-)
PS: 静-打字&蟒蛇
这里有一些项目,帮助我维持一个相当大的系统中蟒蛇。
结构中的代码层。i。e独立的商业逻辑,表示逻辑和你的持久层。投资一点时间在限定这些层,并确保每个人在该项目是带来。对于大型系统创建一个框架,迫使你变成某种方式的发展可能是关键。
试验是关键的,没有单元的测试你可能会结束了一个unmanagable码基数倍的速度比其他语言。牢记这一单元的测试,经常是不足够的,确保有些一体化/接受测试你可以快速运行之后的任何重大变化。
使用 快速的失败 原则。添加声明的情况下你觉得你的代码也许是脆弱的。
具有标准的记录/处理错误,这将有助于你快速浏览的问题
使用IDE(pyDev为我工作),提供种类型的未来,pyLint/检查程序的整合,以帮助你侦测的共同拼写错误的时候了,并促进某些编码的标准
小心对你进口的,从未做x进口或做相对进口品没有使用。
做的重构,搜索/替换工具与经常表达的往往是所有你需要做移动方式/类型的重构。
不相容的变更签名的一种方法。 这不会发生在蟒蛇,因为它在爪哇和C++。
蟒蛇有可选择的参数、缺省值,并远远更多的灵活性,在限定方法的签名。此外,鸭打字意味着--例如--你不需要换一些一流的一个接口的一部分作为一个重大软件的变化。事情就不一样复杂。
你如何找到所有的地方,在那里,方法是正在叫? 查询作为动态语言。如果你需要知道每个地方的方法是使用,查询(或相等的IDE支持搜索)中的伟大工程。
你怎么找出什么样的操作一个实例提供的,因为你没有一个静态型来查找?
a.看看源。你没有Java/C++问题的对象库和罐子文件的抗衡。你不需要所有的详细阐述艾滋病和工具,这些语言的需要。
b.IDE可以提供签名的信息在许多常见的情况。你可以轻易地打败你的IDE的理由的权力。当发生这种情况,则也许应该审查你在做什么可以肯定它是有道理的。如果你IDE不能的原因了你的信息的类型,也许它太动态。
c.在蟒蛇,你经常会的工作,通过交互式的解释。不同Java和C++,可以探索实例直接和互动。你不需要一个复杂的环境。
例如:
>>> x= SomeClass()
>>> dir(x)
你怎么处理/预防的打字错误? 同样作为静态语言:你不阻止他们。你发现和纠正它们。Java只能找到一个某些类别的输入错误。如果你有两个相似的类或可变的名字,你可以在深深的麻烦,甚至带有静态型的检查。
例如:
class MyClass { }
class MyClassx extends MyClass { }
一个错误与这两个类名称可能会导致严重破坏。["但是我不会把自己放在那个位置与爪哇"的人说的。同意。我不会把自己放在那个位置与蟒蛇,无论;你做的类有深刻的不同,并将失败的早期如果他们是被滥用。]
是单元测试的使用,作为替代静态型检查? 这里的其他的观点:静态型检查的替代品,用于清晰、简单的设计。
我曾经使用过的程序员,谁不知道为什么一个应用程序的工作。他们不能找出什么事情并没有汇编;这并不知道之间的差异摘要超类和接口,和不能找出为什么变化的地方使得一些其他的模块在一个单独的罐子文件崩溃。静态型检查了他们虚假的信任在一个有缺陷的设计。
动态的语言允许的程序是简单的。简单的替代品对静态型的检查。清晰度是一个替代品对静态型的检查。
我一般的经验法则是使用动态语言为小型非关键任务项目和静态型的语言为大型项目。我找到代码写在动态的语言,例如蟒蛇被"缠住"更迅速。部分是因为它是从更快地编写代码,在动态的语言,导致以快捷方式和更糟糕的设计,至少在我的情况。部分是因为我有架构来达成的用于快速和容易的重构,当我用爪哇,我没有为蟒蛇。
通常的回答是测试测试测试。你应该有一个广泛的单元测试和运行它经常,特别是前一个新版本进在线。
支持者的动态类型的语言的情况下作出的,你必须试验,因为即使在静态语言一致性的原规则的类型系统只涵盖一小部分什么可能去错误的。