Python和Java语言对比

之前一直习惯于用SSH/Spring做WEB开发,但是最近愈来愈感觉对于小的项目工程,Java相关框架过于沉重,所以经过调研发现Python中flask(对于flask的笔记参考读书笔记)比较方便(python第三方集成的插件特别多,对于高并发稳定性要求不是特别高的内部应用程序,建议采用python开发,其效率之高令人咋舌).

最近把python语法看了一遍,故把Python和Java中异同做下对比,同时对python的基础知识做汇总如下.

解释器:建议使用IPython,其对原生python解释器进行了增强扩充,包括支持tab补全等(可以参考这里)
断点调试:如果进行server端的调试建议使用pdb进行调试(可参考这里)
开发工具:建议使用pycharm(专业版使用:edu邮箱一年激活一次,永久使用,使用参考这里)

1. 缩进

  • python需要用缩进来识别语句之前的逻辑块(初学者缩进出错,大部分原因是机器tab和空格差异导致),需要在行尾加上‘:’表示接下来缩进格式相同的语句是一个语句块【python语句末尾可以不加’;’,但是必须采用缩进
  • Java主要用‘{}’和‘;’来识别,不强制要求缩进(同样建议使用缩进格式)

2. 数据类型

  • python只有四种数据:数值(python支持复数,java不支持)、字符串(str)、列表(list)、元组(tuple)、字典(dict)

  • java则有char,short,byte,int,long,float, double类型

  • python不支持char、byte、指针、单精度浮点数(float实际是双精度浮点数)、short&long(int相当于long)

    对于每种类型的常见方法,python都支持。可以通过dir()查看当前类型支持哪些方法,如dir(str)

3. 字符串

3.1. 字符串表示

  • Python中没有表示单个常量字符串类型的char类型,其可以用单引号‘’、双引号“”来表示一个字符串,也可以用三引号来表示一个多行字符串
  • Java中char表示单个字符,String表示一个字符串,常量字符字符串用双引号“”表示

3.2. 多行字符串

  • Python在字符串末尾加上反斜杠(/)表示字符串在下一行继续
  • Java用加号(+)表示字符串在下一行继续

3.3. Python中其它的表示方法

  • python中还有可以在字符串前加前缀r或R:表示自然字符串,即不对字符串做转移处理(比java方便)
  • Python可以加前缀u或U:表示unicode字符串。python文件中嵌入中文时需要py文件头部加入# -*- coding: utf-8 -*-

4. 操作符

  • Python中**表示幂计算,如果 X**y表示 X y X^y Xy
  • Python中//表示整除,即商的整数部分
  • Python中 ~ 表示按位翻转,~x就是-(x+1)

5. 对象的序列化表示

  • Python中可以使用str() 或repr() 函数来实现对象的序列化
  • Java中通过toString()方法来实现对象的序列化

6. python的内建函数

  • python的函数定义采用如下格式, arg2是函数参数的默认值(如果函数调动时未提供arg2参数,则采用默认值)
    def demo_func(arg1, arg2=2):
               print "xxxxxxxx"
    
  • python中含有大量的内建函数

    对于debug过程中遇到的未知类型的对象,除了用type()查看其类型外,一般还使用dir()方法查看其支持的方法和属性
    数值类型表示的内建函数:bin() oct() hex()等
    对象生成的内建函数 int() long() float() complex()【返回复数】 str() list() dict() tuple()

7. 接口与继承

  • Python中继承示例如下:

    class Fruit:
          def __init__(self, color):
               self.color = color
               print "fruit's color: %s" %self.color
     
          def grow(self):
               print "grow..."
    
    class Apple(Fruit):                               #继承了父类
          def __init__(self, color):                  
               Fruit.__init__(self, color)            #显示调用父类的__init__方法(Python不会自动调用基本类的__init__())
               print "apple's color: %s" % self.color
    
    class Banana(Fruit):                              #继承了父类
          def __init__(self, color):                  
               Fruit.__init__(self, color)            #显示调用父类的__init__方法
               print "banana's color:%s" %s self.color
     
          def grow(self):                             #覆盖了父类的grow方法
               print "banana grow..."
    

    注意: Python 中的__init__()方法类似与Java中的构造函数,Java构造函数中的self默认存在,不需要在构造函数声明的时候进行显示指明,但是Python需要在__init__()函数中显示指明(但是调用时不用显示进行self传递)

  • Python中的接口
    Java中的接口接口是为了解决不能多继承的问题,由于Python中支持多继承,所以Python中没有接口的概念。
    由于接口是特殊的抽象类,接口没有数据成员,而是一组未实现的方法的集合。要想实现接口的功能,完全可以用一个空的类来做。
    例如:

    class Fruit():  
        def add(self):  
             pass  
        def remove(self):  
             pass  
    

你可能感兴趣的:(python)