python项目和java_Python与Java:哪个最好?2019年的代码示例和比较

Python与Java:哪个最好?2019年的代码示例和比较

下一个项目选择Java还是Python?你有选择吗?选择哪一种是更好?

根据GitHub的年度Octoverse报告,Java和Python连续第四年成为第二和第三最流行的语言。Python是增长最快的十大语言之一。大多数其他快速增长者都是新语言,而Python比Java年头长得多。

在撰写本文时,TIOBE索引将Java置于其列表的顶部,将Python置于第三位。Python在2018年12月在排名是第四位超过一年前一个位置。

Digital Ocean最近的语言调查将Python排在开源项目语言列表的第二位。Java排在第四位,只有采用Python数的一半。

所以,这两种语言很受欢迎,哪一个是你最好的选择?

Java与Python在2019年

Java和Python有许多相似之处。这两种语言都具有强大的跨平台支持和广泛的标准库。他们都把(几乎)一切都视为对象。两种语言都编译为字节码,但Python(通常)在运行时编译。他们都是Algol家族的成员,尽管Python偏离了C / C ++而不是Java。

对Python 2.x的支持将于2020年1月1日结束。长期以来,Python开发在2.7版和新版3.x版的常规版之间分散。但是,随着Python 2一年之后的生命终止,关于使用哪个版本的问题得到了解决。本文以Python 3为中心。

同时,Oracle针对Java的新版本模型引发了许多恐惧,不确定和怀疑。即使公告提供了免费选项和明确的升级路径,但混乱仍在继续。一些平台提供商,如Red Hat和亚马逊,已经介入支持OpenJDK。但曾经统一的Java比Python如今更加分散。让我们仔细看看Java与Python之间的相似点和不同点。

Java与Python typing

Python和Java都是面向对象的语言,但Java使用静态类型,而Python是动态的。这是最重要的区别,会影响您以基本方式设计,编写和排除程序故障的方式。我们来看两个代码示例。

首先,在Python中,我们将创建一个包含一些数据的数组,并将其打印到控制台。

stuff = ["Hello, World!", "Hi there, Everyone!", 6]

for i in stuff:

print(i)

接下来,让我们在Java中尝试它。

public class Test {

public static void main(String args[]) {

String array[] = {"Hello, World", "Hi there, Everyone", "6"};

for (String i : array) {

System.out.println(i);

}

}

}

在Python中,我们在同一个数组中放入两个字符串和一个整数,然后打印内容。对于Java,我们声明了一个字符串列表并在其中放入了三个字符串值。

我们不能在Java数组中混合类型,因为代码不会编译。

String array[] = {"Hello, World", "Hi there, Everyone", 6};

我们可以将数组声明为包含Object而不是String,并覆盖Java的类型系统。但是,这并不是任何有经验的Java开发人员使用该语言的方式。

在Python中,我们在声明数组时不必提供类型,并且可以在其中放置我们想要的任何内容。我们有责任确保不要滥用内容。

例如,如果我们修改上面的代码来做这件事怎么办?

stuff = ["Hello, World!", "Hi there, Everyone!", 6]

for i in stuff:

print(i + " Foobar!")

当我们尝试运行它时,上面的代码会抛出一个错误,因为我们不能附加一个带字符串的整数。动态类型和静态类型有哪些优缺点?

静态类型在编译时捕获类型错误。因此,如果混合字符串和整数不是您想要做的,那么Java编译器会抓住错误。但是,静态类型确实会强制执行一些开发人员喜欢的规则。

静态类型是否可以防止错误,它确实使代码运行得更快。处理静态类型代码的编译器可以更好地针对目标平台进行优化。此外,您还可以避免运行时类型错误,从而增加了性能提升

使用动态类型编写的代码往往比静态语言更简洁。变量未声明类型,类型可以更改。这会将副本或类型转换保存到新的变量声明中。

在讨论Java与Python时,代码可读性问题经常出现。我们来看看下一步。

代码可读性和格式

我们以Java和Python为例进行比较。在此示例中,我们需要打开一个大型文本文件。这是Python代码:

def get_symbols(file_name):

with open(file_name, "r") as in_file:

records = []

count = 0

symbol_set = ""

for line in in_file:

symbol_set = symbol_set + line[:-1] + ','

count = count + 1

if count % 50 == 0:

records.append(symbol_set)

symbol_set = ""

symbols.append(symbol_set)

return records

这是Java代码:

List getSymbols(String filename) throws IOException {

List records = new ArrayList<>();

try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {

String line;

int count = 0;

StringBuilder symbol_set = new StringBuilder();

while ((line = reader.readLine()) != null) {

symbol_set.append(line).append(",");

count++;

if ((count % 50) == 0) {

records.add(symbol_set.toString());

symbol_set.setLength(0);

}

}

records.add(symbol_set.toString());

return records;

}

}

Whitespace

Whitespace是Python语法的一部分,而Java则忽略它。Python使用制表符进行嵌套,使用完整冒号来启动循环和条件块。Java忽略空格并使用分号,括号和花括号。关于哪些代码更易于阅读的争论,如关于静态与动态类型的争论,都是主观的。有人说Python代码比Java更简洁统一,因为你的格式选择更有限。Python对Whitespace的使用结束了关于如何格式化代码的争论。您剩下的唯一选择是如何使用空行。

Python片段比Java片段短几行,这在大型程序中有所不同。很大的不同是因为没有关闭的括号。但与Java相比,Python的简洁性更深入。

简短

我们来看看两种语言如何处理文件。

这是Python的再次:

with open(file_name, "r") as in_file:

这是Java:

try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {

在这两种情况下,声明都会创建一个块。文件资源保留在范围内,当代码退出块时,语言将关闭它。

在Python中,我们打开一个文件并从中读取。当循环到达文件末尾时,循环退出。

for line in in_file:

Java更复杂。我们通过传递一个FileReader打开一个BufferedReader。我们消费读者的线路。文件结束时检查null是我们的责任。

while ((line = reader.readLine()) != null) {

这只表明在Python中处理文本文件更容易。但是,它演示了Java如何比Python更冗长。“Pythonic”构造更简洁,要求更低。Java已经在过去的几个版本中发展,在Java 7中引入了try-with-resources,在Java 8中引入了lambdas,但它仍然是一种冗长的语言。

重新审视我们的第一个例子。

这是Python的:

stuff = ["Hello, World!", "Hi there, Everyone!", 6]

for i in stuff:

print(i)

这是Java:

public class Test {

public static void main(String args[]) {

String array[] = {"Hello, World", "Hi there, Everyone", "6"};

for (String i : array) {

System.out.println(i);

}

}

}

这两个片段都将按原样构建和运行。Python将从文件的开头到结尾运行脚本。Java至少需要一个入口点,一个名为main的静态方法。JVM(Java虚拟机)在命令行上传递给它的类中运行此方法。

将Python程序放在一起往往比在Java中更快更容易。对于用于操作文件或从Web资源检索数据的实用程序尤其如此。

性能

Java和Python都编译为字节码并在虚拟机中运行。这将代码与操作系统之间的差异隔离开来,使语言跨平台。但是有一个关键的区别。Python通常在运行时编译代码,而Java会提前编译它,并分发字节码。

大多数JVM对本地代码执行全部或部分程序的即时编译,这显着提高了性能。主流Python不会这样做,除了像PyPy这些。

在某些情况下,Java和Python之间的性能差异有时很大。在Java中,简单的二叉树测试运行速度比在Python中快十倍。

关于Java与Python的最终想法

那么,哪种语言是您的最佳选择?

Oracle的新支持模型改变了Java格局。虽然仍有免费选项,但新的发布计划和支持模式为开发人员提供了一个评估原因。Java客户端需要向Oracle支付费用,定期更改OpenJDK版本,或依赖Red Hat或Amazon等第三方进行修复和安全更新。

与此同时,Python已经清除了Python 3的重大障碍.Python首次拥有比Java更统一的支持模型,开源开发人员正致力于最新版本的语言。在这里给Python带来优势。

Python的动态类型是否优于Java的静态方法是主观的。两种模型之间的争论早于两者,这是一个对你和你的团队最有利的问题。

在使用两种语言处理大型项目之后,我感觉Python的语法比Java更简洁。使用Python中的新项目比使用Java更快地启动和运行。

性能是Java比Python具有显着优势的地方。Java的即时编译使其具有优于Python解释性能的优势。虽然这两种语言都不适合延迟敏感的应用程序,但Java仍然比Python快得多。

考虑到所有因素,Python的优势大于缺点。

但是对于初学者来说,我只能说两点,Python更简单,初步学习后就业的选择方向更加广。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值