除了Python(和语法)的动态特性之外,Java没有的Python语言的一些主要特性是什么,反之亦然?
列表理解.我经常发现自己过滤/映射列表,并且能说[line.replace("spam","eggs") for line in open("somefile.txt") if line.startswith("nee")]
真的很好.
函数是第一类对象.它们可以作为参数传递给其他函数,在其他函数中定义,并具有词法范围.这样就可以很容易地说出类似的东西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更好的语言来执行任务; 我继续使用Java进行一些新项目,尽管他们更喜欢Python.但作为一种语言,我认为Python对于我发现自己需要完成的大多数事情都是优越的.
我认为Philip J. Eby撰写的这篇文章在讨论两种语言之间的差异方面做得很好(主要是关于哲学/心态而不是特定的语言特征).
Python不是Java
Java也不是Python
Python中的一个关键区别是重要的空白.这让很多人离开了我很长一段时间 - 但是一旦你开始它似乎自然而且比;
任何地方都更有意义.
从个人角度来看,Python比Java具有以下优势:
没有选中的例外情况
可选参数
更少的样板和更少的冗长一般
除此之外,Python Wiki上的这个页面是一个很好看的地方,有很多链接到有趣的文章.