所有关于电路

科学家和工程师:Python优势

线程启动

某人adad

2009年7月7日加入
1,583
一两周前,在另一个帖子里的一场讨论让我想到了写一份文档,解释为什么编程语言python及其附加组件是技术人员工具箱里的好工具。我并不是说它应该取代其他语言(事实上,一个有经验的技术人员会懂很多语言),但我发现它是一个优秀的通用编程工具,而且它通常是我首先使用的。

我写了附加文档来介绍语言的一些功能,并讨论提供额外电源的附加组件。您也可以获得zip文件在这里(请参阅页面的底部)。

编辑2010年11月17日:我更新了文档以添加另一个示例,并更详细地讨论Python 2.x和3.x之间选择的问题。最新版本将始终在此:http://code.google.com/p/hobbyutil/downloads/list。我建议从此链接获取文件,而不是使用附加到此帖子的文件。

附件

上次编辑:
R

RapidCoder.

加入2011年1月16日
37
1. Scala是静态打字的。Python没有静态类型。这意味着如果您进行类型错误,则会在运行时失败。如果在拍摄的分支中发出错误,则可能不会在测试时注意到错误。在Scala中,在程序启动时检测到此类错误。
2. Scala比Python更快地执行速度大约20-100倍。Python被解释,Scala被编译为机器代码。
Scala有模式匹配,Python没有任何可比性。
4. Scala为您提供更自由,您如何布置代码,没有有意义的空白。
5.Scala ide支持代码补全和重构。这对于Python是不可能的。
6. Scala代码通常与Python(或有时较短)一样简洁,并且由于自动代码完成而更快地输入。
7.Scala有更成熟的库(任何Java库都可以使用它)。

足够的?

Python比Scala有一个优势:
1.更好的是脚本短期任务。Scala脚本只是花费太多时间开始。
T

Tom66.

加入2009年5月9日
2,595
1. Scala是静态打字的。Python没有静态类型。这意味着如果您进行类型错误,则会在运行时失败。如果在拍摄的分支中发出错误,则可能不会在测试时注意到错误。在Scala中,在程序启动时检测到此类错误。
动态打字带来优点和缺点。例如,您可以创建可以处理任何类型成员的方法。说一个加法功能;它可以处理ints,floats和任何其他类型的项目,可以添加到另一个(只要它们兼容 - 例如,添加int和列表没有意义,并且正确地提出异常。)

2. Scala比Python更快地执行速度大约20-100倍。Python被解释,Scala被编译为机器代码。
听说过Psyco ?Python代码可以在JIT中运行,这几乎和本地C一样快!对于大多数应用速度来说并不至关重要。如果您需要速度,您也不应该写入。

Scala有模式匹配,Python没有任何可比性。
regex参见模块"re",基本通配符(unix风格)匹配参见模块"glob"和"fnmatch"。

4. Scala为您提供更自由,您如何布置代码,没有有意义的空白。
Python将让您在您喜欢的任何空白样式中写作,坦率地,您应该使用空格。

5.Scala ide支持代码补全和重构。这对于Python是不可能的。
Python Ides列表

6. Scala代码通常与Python(或有时较短)一样简洁,并且由于自动代码完成而更快地输入。
见上图。

7.Scala有更成熟的库(任何Java库都可以使用它)。
JPython或Jython允许你从Python运行Java库,在我看来,这些Python库非常好。
R

RapidCoder.

加入2011年1月16日
37
例如,您可以创建可以处理任何类型成员的方法。
某些静态类型的语言也可以这样做。scala可以。

听说过Psyco ?Python代码可以在JIT中运行,这几乎和本地C一样快!
它不是。看到基准。实际上,它只比解释过的Python快一点点。问题不在于解释——问题在于缺少静态类型,这使得调用方法和访问字段非常昂贵。Jython是运行在JVM上的Python的一种变体,它是JITed的。然而,它仍然比Java、Scala或Groovy慢得多——因为它们是静态类型的。

regex参见模块"re",基本通配符(unix风格)匹配参见模块"glob"和"fnmatch"。
布拉。模式匹配不是文本正则表达式。这是一个更强大的东西。模式匹配是函数式编程语言的一个通用概念——它允许您根据对象模式匹配对象。不仅仅是文本或顺序对象。在ML语言家族中使用,Haskell和Scala(可能还有其他一些)。

Python将让您在您喜欢的任何空白样式中写作,坦率地,您应该使用空格。
好点了。然而,我仍然不相信标签vs空间问题不会在某些时候困扰你。

很好,有很多ide,但没有真正工作的代码完成。名单上的大多数都是测试版。

JPython或Jython允许你从Python运行Java库,在我看来,这些Python库非常好。
同意了。点。我忘记了Jython。然而,对于JVM语言来说,Clojure和Scala根本没有机会。:)
R

RapidCoder.

加入2011年1月16日
37
例如,您可以创建可以处理任何类型成员的方法。
某些静态类型的语言也可以这样做。scala可以。

听说过Psyco ?Python代码可以在JIT中运行,这几乎和本地C一样快!
它不是。看到基准。实际上,它只比解释过的Python快一点点。问题不在于解释——问题在于缺少静态类型,这使得调用方法和访问字段非常昂贵。Jython是运行在JVM上的Python的一种变体,它是JITed的。然而,它仍然比Java、Scala或Groovy慢得多——因为它们是静态类型的。

regex参见模块"re",基本通配符(unix风格)匹配参见模块"glob"和"fnmatch"。
布拉。模式匹配不是文本正则表达式。这是一个更强大的东西。模式匹配是函数式编程语言的一个通用概念——它允许您根据对象模式匹配对象。不仅仅是文本或顺序对象。在ML语言家族中使用,Haskell和Scala(可能还有其他一些)。

Python将让您在您喜欢的任何空白样式中写作,坦率地,您应该使用空格。
好点了。然而,我仍然不相信标签vs空间问题不会在某些时候困扰你。

很好,有很多ide,但没有真正工作的代码完成。名单上的大多数都是测试版。

JPython或Jython允许你从Python运行Java库,在我看来,这些Python库非常好。
同意了。点。:)
T

Tom66.

加入2009年5月9日
2,595
某些静态类型的语言也可以这样做。scala可以。
好的..点拍摄,但有许多其他用途用于动态/“鸭”打字。

它不是。看到基准。实际上,它只比解释过的Python快一点点。问题不在于解释——问题在于缺少静态类型,这使得调用方法和访问字段非常昂贵。Jython是运行在JVM上的Python的一种变体,它是JITed的。然而,它仍然比Java、Scala或Groovy慢得多——因为它们是静态类型的。
这完全取决于你在做什么。如果你在做算法的事情,你可以得到非常高的性能。如果你做了很多方法调用,并且混合了各种类型,就会很慢。

布拉。模式匹配不是文本正则表达式。这是一个更强大的东西。模式匹配是函数式编程语言的一个通用概念——它允许您根据对象模式匹配对象。不仅仅是文本或顺序对象。在ML语言家族中使用,Haskell和Scala(可能还有其他一些)。
我必须承认我以前从未听说过这个。我不知道是否有Python库或本机支持。

好点了。然而,我仍然不相信标签vs空间问题不会在某些时候困扰你。
坚持空格,就不会有问题。在许多ide中,可以让编辑器用许多空格替换制表符。

很好,有很多ide,但没有真正工作的代码完成。名单上的大多数都是测试版。
闲置有代码完成,那么NetBeans也是Pydev的,所以Winglde ......实际上,大多数列表都这样做!但是,我从未使用代码完成则从未找到过使用。

同意了。点。我忘记了Jython。然而,对于JVM语言来说,Clojure和Scala根本没有机会。:)
我没有什么可以添加的,因为我无法比较我未使用的语言 - 我只是提高了关于我个人最喜欢的点。
R

RapidCoder.

加入2011年1月16日
37
好的..点拍摄,但有许多其他用途用于动态/“鸭”打字。
什么禁止您在同一语言中拥有静态键入和鸭肉?Google Go和Scala是显示可能的语言。Google Go有精确的鸭子打字,如动态语言,Scala都有一个增强,型安全版的鸭键入,称为结构打字。两者都可以做任何可能的动态语言。

这完全取决于你在做什么。如果你在做算法的事情,你可以得到非常高的性能。如果你做了很多方法调用,并且混合了各种类型,就会很慢。
做复杂的算法工作(如创建模拟引擎)意味着通常要做大量的方法调用,创建大量的类和对象,等等。在微基准测试中实现高性能很容易,但在大型应用程序中,如果方法调用(基本的粘合剂)缓慢且没有内联,就不容易实现。

闲置有代码完成,那么NetBeans也是Pydev的,所以Winglde ......实际上,大多数列表都这样做!但是,我从未使用代码完成则从未找到过使用。
把它列在列表上和让它可靠地工作是有很大区别的。我有一些朋友写了很多Python,他们也不使用代码补全——因为它几乎从来都不起作用,除了在不需要的琐碎情况下。代码完成功能非常好,尤其是使用尚未编写的代码时。节省了大量的文档查找。类型是一种文档,一种总是最新的文档,所以非常非常有价值。

有人写了一篇关于类型系统的很好的博客:
http://www.pphsg.org/cdsmith/types.html
T

Tom66.

加入2009年5月9日
2,595
什么禁止您在同一语言中拥有静态键入和鸭肉?Google Go和Scala是显示可能的语言。Google Go有精确的鸭子打字,如动态语言,Scala都有一个增强,型安全版的鸭键入,称为结构打字。两者都可以做任何可能的动态语言。
这很有趣,我在维基百科上找到了这个(不确定是否相关):

一个引用的批评是:鸭键入的一个问题是它迫使程序员对他或她在任何特定时间工作的代码更广泛了解。以一种使用类型层次结构和参数类型检查的强烈和静态类型的语言,将意外的对象类型提供给类更难。例如,在Python中,您可以轻松创建一个名为Wine的类,该类预计将实现“将”属性作为成分实现“按”属性。但是,一个名为裤子的类也可能实现了按钮()方法。用鸭子打字,为了防止奇怪,难以检测的错误,开发人员需要知道每次潜在使用方法“按”,即使它概念上与他或她正在努力的内容。从本质上讲,问题是,“如果它像鸭子一样走着鸭子”,它可能是一只龙做鸭子冒充的龙。即使他们可以冒充鸭子,你可能并不总是想让龙进入池塘。

Duck Cyning的支持者,如Guido Van Rossum,认为这个问题是通过测试处理的,以及所需的CodeBase的必要知识。
就个人而言,我不了解结构打字,我需要仔细看看它。

做复杂的算法工作(如创建模拟引擎)意味着通常要做大量的方法调用,创建大量的类和对象,等等。在微基准测试中实现高性能很容易,但在大型应用程序中,如果方法调用(基本的粘合剂)缓慢且没有内联,就不容易实现。
我正在考虑更像是顺序表达式 - 例如,在Python的一个项目中,有大约20行的代码,它操纵了一个矩阵,尽管使用了类,但它与psyco(可能左右10x大约有大量的课程,它确实很快加速了T记录它。)我制作了一个程序,这有很多循环 - 通常是应该慢的东西 - PSYCO大约20倍。

把它列在列表上和让它可靠地工作是有很大区别的。我有一些朋友写了很多Python,他们也不使用代码补全——因为它几乎从来都不起作用,除了在不需要的琐碎情况下。代码完成功能非常好,尤其是使用尚未编写的代码时。节省了大量的文档查找。类型是一种文档,一种总是最新的文档,所以非常非常有价值。
就像我说的,我不使用它,也从未在任何语言中发现它的用处。所以我不能提供太多的比较。
T

汤臣

2010年9月6日加入
16
至于代码补全——我用的是PyCharm(虽然不是免费的),它工作得很好。Comodo看起来也不错,但还没试过。

我同意表演之外的大部分积分 - 你想要表现,而不是远离与Java相关的任何东西......仍然存在。
R

RapidCoder.

加入2011年1月16日
37
你能用任何代码或真实的例子来支持你的观点吗?

我可以看到很多的证据现在Java与C的表现,如果你用足够的大型应用程序和排除愚蠢的微基准测试的类型“看哪,我在这些10行C代码的一个星期,现在是一个非常难以理解的混乱,但比Java快10%”。

一些实际的例子:
- Facebook决定在Java中编写其高性能数据库系统。
- Amazon的核心数据库也使用纯Java解决方案。
- Twitter在Scala(JVM语言)中创建了他们的消息路由后端,主要是由于性能和可扩展性考虑因素。
- Jake2,一个Quake2到Java的端口和最初的一样快
- Java Hadoop赢得了一些高性能计算比赛,表现优于C ++的软件
- Tomcat就像Apache WebServer一样快,Netty非常接近Nginx。
- 与MySQL和PostgreSQL相比,HSQLDB或H2数据库引擎。C / C ++数据库肯定比Java对应物慢。

还有一个,来自我个人的经验:

我们最近的性能测试了我们的电路仿真引擎原型在JVM上运行,执行一些RLC过滤器仿真,我们发现它比电路Logix,Topspice和Tina(全部写入C)速度快2-3倍。它仍然比LTSPICE慢,但我们仍然在alpha阶段 - 该项目只有半年。我认为我们能够尽快与LTSPICE相匹配 - 2X性能改进很容易,但现在不是我们的优先事项。BTW:LTSPICE不保证非线性电路的全球收敛,而我们的表现。做得好比快速做事更重要。:P.

在C或C ++中写大而快速软件的问题是您可以大大,或者快速,但不是两者,除非您拥有无限预算和时间。因此,虽然很容易以小型微稳态擅长Java,但对于真实的世界大应用而言,这更难做到。简单地,当你足够大时,你几乎没有时间优化 - 大部分时间都花了创造功能和修复错误。而在这个Java比C家庭语言要好得多,特别是如果我们谈论艰难,复杂的科学代码。

它是更容易在Java,Scala或Python中实现良好和复杂的算法而不是C ++。C ++程序员经常挣扎只能得到任何问题的解决方案,因为语言为它增加了太多自己的复杂性。当移动到更具表现力的语言时,问题似乎更简单,现在您不仅可以想到任何解决方案,还可以是快速解决方案和最佳算法。我们的模拟器和香料是这种情况。我们的不是更快的,因为我们在Java中实现了相同的Spice算法。我们刚刚使用不同,更好的算法。
最后编辑了主持人:
C

CJ3.

加入2012年3月9日
11
Python的问题是两倍:1。其语法(混淆C);和2.弱打字。更好的想法语法是ADA;强制打字,应该被迫,例如在ADA或Truebasic中。

ingframin

加入2012年2月2日
1
Python和Java是不同的语言,具有不同的目的。
在电子实验室中,最大的编程活动是自动化测量或分析数据的脚本。
Python在这方面是完美的,因为Java需要良好的面向对象设计,以避免糟糕的代码,而且它不适合编写脚本。
还考虑在Java中加载VISA驱动程序或DAQMX驱动程序非常复杂......
使用Python这很容易,而且我们可以比使用Java更快地开发脚本。
我喜欢Java,但我把它用于其他目的:)
我认为这是一个共享的意见,最好的是了解两种语言(以及可能的一些其他语言),以便根据案例做出最佳选择。
关于速度问题......我必须承认通常主速度问题是椅子和键盘之间;)(但如果能把我的计算机科学家朋友们团团围住,我就能解决很大一部分这个问题:P.)
Takao21203.

Takao21203.

加入2012年4月28日
3,700.
Python的问题是两倍:1。其语法(混淆C);
当我审查它时,这就是我在想的。有些奇怪的C.与PHP和Ruby相同。是的,我知道这些是解释的,动态,脚本的语言。

我发现要跟上这些新的c++扩展非常困难,同时,要使用嵌入式C语言也非常困难。

如果你看看现在的网站,它们充满了不必要的东西…当然,大量的脚本语言程序员被雇佣,因为使用这些语言是如此的困难。

我真的不明白这些脚本语言有什么新意和革命性。
KL7AJ

KL7AJ

加入2008年11月4日
2229年
一两周前,在另一个帖子里的一场讨论让我想到了写一份文档,解释为什么编程语言python及其附加组件是技术人员工具箱里的好工具。我并不是说它应该取代其他语言(事实上,一个有经验的技术人员会懂很多语言),但我发现它是一个优秀的通用编程工具,而且它通常是我首先使用的。

我写了附加文档来介绍语言的一些功能,并讨论提供额外电源的附加组件。您也可以获得zip文件在这里(请参阅页面的底部)。

编辑2010年11月17日:我更新了文档以添加另一个示例,并更详细地讨论Python 2.x和3.x之间选择的问题。最新版本将始终在此:http://code.google.com/p/hobbyutil/downloads/list。我建议从此链接获取文件,而不是使用附加到此帖子的文件。
最佳