千锋教育-做有情怀、有良心、有品质的IT职业教育机构

你所在的位置:首页 > 常见问题

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

时间:2017-12-27 16:56:37 来源:千锋教育  作者:

   作为一个数年C/Java/Python混合开发者, 我谈谈我的感受.

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

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

  Python:

  优点 ( 知乎怎么不能把这行字变大点??):

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

  语言方面, 举几个例子:

  一切都是对象!!!

  类(class本身)/函数/类方法是callable的对象

  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, 你会惊呆的, 操作向量/矩阵跟基本类型一样方便

  缺点:

  慢

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

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

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

  动态类型

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

  对于不写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可不得了

热帖推荐

  • 成都地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226-801
    面授课程:iOS培训、Android培训、HTML5培训、UI培训、PHP培训、JavaEE培训、好程序员
  • 深圳科技园校区:深圳市南山区科苑南路高新技术产业园R3-B栋5层
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    深圳西部硅谷校区:深圳市宝安区宝安大道5010号西部硅谷B座A605-619
    咨询电话:0755-86681178/9-801
    面授课程:iOS培训、Android培训、HTML5培训、UI培训、PHP培训、JavaEE培训、好程序员
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-65025129-602
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员
  • 郑州地址:郑州市金水区纬五路21号河南教育综合楼(经纬中学楼)6/7/8层
    咨询电话:0371-55911950 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 大连地址:大连市甘井子区软件园路2号B8座二楼
    咨询电话:0411-39026086 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 武汉地址:武汉市东新区光谷大道77号金融港B26栋9楼
    咨询电话:027-59905909 027-59905908 027-59905902
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 西安南二环校区:西安市二环南路西段60号永安大厦4层
    西安科技园校区:西安市雁塔区高新六路52号立人科技园C座西区4层
    咨询电话:029-85260160 029-85261030 029-85260960
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226-801
    面授课程:iOS课程培训、Android课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226-801
    面授课程:iOS课程培训、Android课程培训
  • 扫码匿名提建议
    直达CEO信箱