Java-> Python?

时间:2020-03-05 18:49:23  来源:igfitidea点击:

除了Python的动态特性(和语法)之外,Java没有Python语言的一些主要功能,反之亦然?

解决方案

回答

我认为Philip J. Eby的这对文章在讨论两种语言之间的差异(主要是关于哲学/心理而非特定语言功能)方面做得很好。

  • Python不是Java
  • Java也不是Python

回答

Python中的一个主要区别是大量的空白。这也使很多人离开了我很长一段时间,但是一旦开始,这似乎很自然,并且比各处都有意义。

从个人角度来看,Python比Java具有以下优点:

  • 无检查异常
  • 可选参数
  • 样板更少,总体上也不那么冗长

除此之外,Python Wiki上的该页面是一个不错的地方,其中包含许多指向有趣文章的链接。

回答

有了Jython,我们可以同时拥有两者。它仅在Python 2.2上有效,但在需要可访问Java运行时的嵌入式解释器时仍然非常有用。

回答

  • 列表理解。我经常发现自己正在过滤/映射列表,并且如果line.startswith(" nee")]能够在open(" somefile.txt")中为行说`[line.replace(" spam"," eggs")真的很好
  • 函数是一流的对象。它们可以作为参数传递给其他函数,可以在其他函数中定义,并具有词法范围。这使得说诸如people.sort(key = lambda p:p.age)之类的事情变得非常容易,从而可以按年龄对一群人进行排序,而不必定义自定义比较器类或者同样冗长的内容。
  • 一切都是对象。 Java具有不是对象的基本类型,这就是为什么标准库中的许多类都定义9个不同版本的函数的原因(对于boolean,byte,char,double,float,int,long,Object,short)。 Array.sort是一个很好的例子。自动装箱有帮助,尽管当某些东西变成空值时会使事情变得尴尬。
  • 特性。 Python使我们可以创建具有只读字段,惰性生成的字段以及在分配时进行检查的字段,以确保它们永远不会为0或者null或者我们要防止的任何内容,等等。
  • 默认和关键字参数。在Java中,如果要使用最多可以包含5个可选参数的构造函数,则必须定义该构造函数的6个不同版本。而且根本没有办法说出'Student(name =" Eli",age = 25)`
  • 函数只能返回1件事。在Python中,我们有元组分配,因此可以说" spam,eggs = nee()",但是在Java中,我们需要求助于可变参数或者具有2个字段的自定义类,然后再添加两行代码提取那些字段。
  • 列表和字典的内置语法。
  • 运算符重载。
  • 通常设计更好的库。例如,要解析Java中的XML文档,我们可以说Document doc = DocumentBuilderFactory.newInstance()。newDocumentBuilder()。parse(" test.xml");,而在Python中,我们可以说doc = parse(" test。 xml")

无论如何,我可以继续进行进一步的示例,但是Python总体上来说是一种更加灵活和富有表现力的语言。我也很喜欢它是动态类型的,但是它有一些缺点。

Java比Python具有更好的性能,并具有更好的工具支持。有时候,这些事情很重要,而Java是比Python更好的语言来完成一项任务。尽管我更喜欢Python,但我仍将Java用于一些新项目。但是作为一种语言,我认为Python在我发现自己需要完成的大多数事情上都是优越的。

回答

除了Eli Courtwright所说的:

  • 我发现Python中的迭代器更加简洁。我们可以在某些东西中使用i,它几乎可以处理所有事情。是的,Java从1.5开始就变得更好,但是例如,我们可以使用相同的结构遍历python中的字符串。
  • 内省:在python中,我们可以在运行时获取有关对象或者模块的有关其符号,方法甚至其文档字符串的信息。我们也可以动态实例化它们。 Java有一些这样的功能,但是通常在Java中,它需要半页代码才能获得一个类的实例,而在Python中,它大约需要3行。据我所知docstrings东西在Java中不可用