Python 相较于Java 而言,有什么优势?

简介: Python 相较于Java 而言,有什么优势?

最近在后台,有很多的同学私聊我说,Python和Java.,哪个具有前景呢?今天我们就来简单的讲一下这两者的区别:

我认为C, Java跟Python都是非常成功的语言, 具体选哪种看你的场景.

言归正传,来对比一个Python跟Java.

Python:
优点 :语法简洁优美, 功能强大, 标准库跟第三方库灰常强大, 应用领域非常广: vinta/awesome-python · GitHub(跟PHP形成宣明对比!)

语言方面, 举几个例子:

一切都是对象!!!
类(class本身)/函数/类方法是callable的对象
因为是对象,所以你当然可以传来传去啦. 比如:

class A:
def __init__(self):

   print "init A"

def run(self):

   print "run A"threading.Thread(target=A).start() #: 在另一个线程执行A()a = A()threading.Thread(target=a.run).start() #: 在另一个线程执行a.run() ... # 惊呆没有,这是怎么做到的?? 也许你该看看描述符的概念

List表达式(其他好多语言也有,但是我最喜欢python的写法):
把"1023"变成 [1, 2, 3]

[ int(x) for x in "1023" if x != "0" ]
(当前你可以用Lisp风格的: map(int, filter(lambda x: x != "0", "1024")))

对dict也是类似:

adict = {"a":1, "b":2}{k: v*2 for k, v in adict.items() }

yield关键字:
当你需要返回很多东西然后一个一个用的时候, 你可以一次返回一个

def xrange(n):

 i = 0
 while i < n:
     yield i
     i += 1用法:for i in xrange(10):
print i

装饰器@:
把something_heavy()返回的结果缓存起来(以函数名+args为缓存的键值,只缓存最近使用的10条)

@functool.lru_cache(10)def something_heavy(args):

  #各种耗时操作.....
  pass

运算符重载:
试试numpy, 你会惊呆的, 操作向量/矩阵跟基本类型一样方便

申请阿里云服务时,可以使用2020元阿里云代金券,阿里云官网领取网址:https://dashi.aliyun.com/site/yun/youhui (长期有效)

缺点:


目测python是最慢的脚本语言,比V8上的JS还慢不少. (研究一下描述符,你会发现python调用对象方法的开销好大!)

但是python创始人说了, 一般程序的瓶颈在于20%的代码, 所以你可以把那20%的代码用C重写(而python是胶水语言,用C重写部分代码当然很easy啦)

同时,你可以试试PyPy, 引入了JIT技术

动态类型
有人说: 动态类型写时爽, 重构起来是灾难(原谅我记不得原话..).

阿里云服务器1核2G低至89元/年,阿里云官活动网址:https://dashi.aliyun.com/site/yun/aliyun

对于不写unittest, 不做代码覆盖率测试的人来说, 动态语言当然是危险的, 拼写错误都可能被隐藏, 重构?别捣乱!

python创始人有话说: "如果你认为编译器可以帮你解决所有问题,那你一定干编程没多久" (鄙人深有体会,曾经年少轻狂的我非常鄙视javascript), "不管什么程序,都需要写testcase, 既然要写testcase, 那么动态类型不是问题!"

在此推荐大家两个工具: py.test python-coverage

Java:

优点

用几个词形容一下Java语言: 优美, 严谨, 健壮,不易出错.

当然, 使用也非常的广泛: 常年盘踞编程人员数量排行榜第一名!
各种库也灰常多: akullpp/awesome-java · GitHub
同样的代码, 相比C++(甚至python), Java代码出BUG的概率要小点(当然,写的时候一般会比python长).

Java从语言设计上尽量避免了程序员犯错, 比如自动垃圾回收, 抛弃无符号类型, 安全的枚举, 编译期泛型检查(Java1.5之后加入的泛型,但是只是用来做编译器检查,运行时跟以前一样), 强制的异常处理(遇到异常必须catch或者申明throws) 等等(当然,某些特性python也有.)

Java标准库和好多第三方代码都充斥着浓浓的设计感!!!, 各种设计模式到处可见. 从下面的语句可以看出一点来:

new BufferedInputStream(new FileInputStream(new File("somepath")))
尼玛, 好多字, 看我的:
C:

fopen("somepath", "r")
Python:

open("somepath")
Java代码多,但是API可复用行更强,选择更多(我想一次读完文件,不要buffer呢?)

因为健壮安全,所以Java成了企业级后台的标准. 想想银行后台, 关键地方出点bug可不得了.

缺点:

要敲好多代码, 参考上面的例子...

没有Python那些奇葩特性, 灵活性不足,怎么写你还是Java, 而Python可以写的像Javascript/Lisp/Matlab.....

简单来说, Python是给人设计的(人生苦短,请用Python), C/C++更像是为机器设计的,
而Java则介于两者之间.

相关文章
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
【专栏】Python在人工智能领域的应用现状、优势及未来趋势
【4月更文挑战第27天】本文探讨了Python在人工智能领域的应用现状、优势及未来趋势。Python作为数据科学、机器学习、深度学习和自然语言处理的首选语言,拥有丰富的库如NumPy、Pandas、TensorFlow和NLTK等。其简洁易学、跨平台和活跃社区等特点促进了AI的普及和发展。未来,Python将在强化深度学习、融合新兴技术、提高可解释性和人才培养等方面持续发挥关键作用。
|
3天前
|
SQL Java 数据处理
实时计算 Flink版产品使用合集之怎么热加载Java和Python的UDF
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
11 1
|
4天前
|
监控 前端开发 Java
Java公立医院绩效考核管理系统 医院绩效考核系统的优势有哪些? 
医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求,以“工作量为基础的考核方案”为核心思想,结合患者满意度、服务质量、技术难度、工作效率、医德医风等管理发展目标的考核体系,形成医院的内部绩效考核与分配机制,通过信息化手段为绩效考评管理人员实施医院绩效考评工作提供了有效工具,扩展了信息管理范围,增加了信息分析的广度与深度。这不仅使绩效评价工作更加科学化、规范化和自动化,而且从根本上改变了绩效评估工作方式,实现了绩效评价数据网络化采集,评价结果透明化管理,奖金分配数据自动化生成,极大地提高了绩效评估的全面性、准确性、时效性、公正性。从而推进医院绩效管理的专业化、规范化和精细化管理,充分发挥
14 0
|
4天前
|
安全 数据安全/隐私保护 Python
Python的整型在计算中具有以下优势
【5月更文挑战第6天】Python整型提供任意精度整数计算,无溢出风险;支持多种算术运算,操作简便;作为不可变类型保证数据安全;能进行高级数学运算,并有NumPy等库加持,适合数值分析和科学计算。
22 0
|
4天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
4天前
|
Java
Java 事件驱动编程:概念、优势与实战示例
【4月更文挑战第27天】事件驱动编程是一种编程范式,其中程序的执行流程由外部事件的发生而触发或驱动。
21 0
|
4天前
|
Java 程序员
Java 异步编程:概念、优势与实战示例
【4月更文挑战第27天】在现代软件开发中,异步编程是一种重要的编程范式,特别适用于处理长时间运行的任务,如网络通信、文件操作等。
21 0
|
4天前
|
Java 数据处理 API
Java 函数式编程:概念、优势与实战示例
【4月更文挑战第27天】函数式编程(Functional Programming,简称 FP)是一种编程范式,它将计算视为数学函数的求值并避免使用程序状态以及可变数据。
27 1
|
4天前
|
Java Shell API
Java 模块化编程:概念、优势与实战指南
【4月更文挑战第27天】Java 模块化编程是 Java 9 中引入的一项重大特性,通过 Java Platform Module System (JPMS) 实现。模块化旨在解决 Java 应用的封装性、可维护性和性能问题
30 0
|
4天前
|
测试技术 API 持续交付
【专栏】Python在自动化测试与单元测试中的应用,强调其简洁语法和丰富库的优势
【4月更文挑战第27天】本文探讨了Python在自动化测试与单元测试中的应用,强调其简洁语法和丰富库的优势。文章分为三部分:首先,阐述自动化测试的重要性及Python的易学性、库支持、跨平台和社区支持;其次,介绍了Python的Unittest标准测试框架和Pytest第三方框架的特点与用法;最后,讨论了Web UI和API自动化测试实践,并提出持续集成、测试金字塔等最佳实践。Python为软件开发的测试环节提供了强大支持,帮助构建更稳定的系统。