JAVA和PYTHON对比

JAVA和PYTHON对比

“Java只有一种,而Python语言有两种,2和3“。Python 3.0在设计的时候为了不带入过多的累赘,和Python2在一些方面有一些不同,下面也会详细说明。

有了C++/Java基础的学习python还是很快的,我在看教程的时候很多东西都是跳过不看的,因为它和其他语言里的都一样。为了减少看那些冗余内容的时间,特此整理一下python和C++/Java在编码方面不一样的地方,方便自学python的人更快的学习。

文末有python及其IDE资源哦。


一、 基础语法

1、缩进

python与C++/Java最大的不同就是使用缩进来表示代码块,而不使用大括号({})。Python中一个模块的界限,是由这行前面有多少空格决定的,而C和Java用的是大括号{}。比如以下程序:

if True:
    #可以在同一行中使用多条语句,语句之间使用分号(;)分割。
    print ("True");print ("True")
else:
    print ("False")12345

那如果这行代码比较长,一行放不下怎么办?我们可以使用反斜杠()来实现

total = item_one + \
        item_two + \
        item_three123

python的空行没有任何作用,加了也不会报错,用适当的空行隔开模块可以让你的代码层次更加清晰明了。

2、注释

Python中单行注释以 # 开头,多行注释使用三个单引号(”’)或三个双引号(“”“)。例如:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py

# 第一个注释
print ("Hello, Python!")  # 第二个注释
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""1234567891011121314

二、 数据类型

1、变量的声明

在Python中定义变量的时候,不需要声明其数据类型,但是必须赋值,在赋值的时候会给它分配相应的数据类型。例如:

 counter = 100 # 整型变量
 miles = 1000.0 # 浮点型变量
 name = "abcdefg" # 字符串
 print (counter)
 print (miles)
 print (name)123456

在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型,变量只是对它的引用,可以用del counter删除。 这里插一句,Python2和Python3的print有较大不同,而且print 默认输出是换行的。

print counter #这是Python2
print (counter) #这是Python3
#如果要实现不换行:
print counter , #Python2:在变量末尾加上逗号
print (counter,end=" ")#Python3:在变量末尾加上 end=""12345

2、数据类型

Python3 中有六个标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)。 Python中没有char,单字符也按字符串处理。 Python2没有Set(集合)。

(1)Number

int、float、bool、complex(复数)。 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。 在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,可以和数字相加。

(2)String:

Python中的字符串用单引号(‘)或双引号(“)括起来,同时使用反斜杠()转义特殊字符。 字符串的截取的语法格式如下:变量[头下标,尾下标] 索引值以 0 为开始值,-1 为从末尾的开始位置。 加号 (+) 表示连接字符串, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。实例如下:

str = 'abcdef' 
print (str) # 输出字符串 
print (str[0:-1]) # 输出第一个到倒数第二个的所有字符 
print (str[0]) # 输出字符串第一个字符 
print (str[2:5]) # 输出从第三个开始到第五个的字符 
print (str[2:]) # 输出从第三个开始的后的所有字符 
print (str * 2) # 输出字符串两次 
print (str + "ghi") # 连接字符串12345678

执行以上程序会输出如下结果:

abcdef
abcde
a
cde
cdef
abcdefabcdef
abcdefghi1234567

(3)List(列表)

列表是Python 中使用最频繁的数据类型,和Java中的List比较像。 但是Python的列表中的元素可以是不同类型,比如数字,字符串甚至可以包含列表。 列表是写在方括号([])之间、用逗号分隔开的元素列表。 和字符串一样,列表同样可以被索引和截取

#!/usr/bin/python3 
list = [ 'abcd', 123 , 4.56, 'efghij', 78.9 ]
tinylist = [123, 'efghij'] 
print (list) # 输出完整列表 
print (list[0]) # 输出列表第一个元素
print (list[1:3]) # 从第二个开始输出到第三个元素 
print (list[2:]) # 输出从第三个元素开始的所有元素 
print (tinylist * 2) # 输出两次列表 
print (list + tinylist) # 连接列表123456789

输出结果:

['abcd', 123, 4.56, 'efghij', 78.9]
abcd
[123, 4.56]
[4.56, 'efghij', 78.9]
[123, 'efghij', 123, 'efghij']
['abcd', 123, 4.56, 'efghij', 78.9, 123, 'efghij']123456

(4)元组:

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。

#!/usr/bin/python3 
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 ) 
tinytuple = (123, 'runoob') 
print (tuple) # 输出完整元组 
print (tuple[0]) # 输出元组的第一个元素 
print (tuple[1:3]) # 输出从第二个元素开始到第三个元素
print (tuple[2:]) # 输出从第三个元素开始的所有元素 
print (tinytuple * 2) # 输出两次元组 
print (tuple + tinytuple) # 连接元组123456789

输出结果:

('abcd', 786, 2.23, 'runoob', 70.2)
abcd
(786, 2.23)
(2.23, 'runoob', 70.2)
(123, 'runoob', 123, 'runoob')
('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')123456

(5)集合(set)

集合(set)是一个无序不重复元素的序列,和java里的set一样。 基本功能是进行成员关系测试和删除重复元素。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

#!/usr/bin/python3 
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'} 
print(student) # 输出集合,重复的元素被自动去掉 
# 成员测试 
if('Rose' in student) : 
    print('Rose 在集合中') 
else : 
    print('Rose 不在集合中') 

# set可以进行集合运算
a = set('abracadabra') 
b = set('alacazam') 
print(a) 
print(a - b) # a和b的差集 
print(a | b) # a和b的并集 
print(a & b) # a和b的交集 
print(a ^ b) # a和b中不同时存在的元素1234567891011121314151617

输出结果:

{'Mary', 'Jim', 'Rose', 'Jack', 'Tom'}
Rose 在集合中
{'b', 'a', 'c', 'r', 'd'}
{'b', 'd', 'r'}
{'l', 'r', 'a', 'c', 'z', 'm', 'b', 'd'}
{'a', 'c'}
{'l', 'r', 'z', 'm', 'b', 'd'}1234567

注:python2中没有set

(6)Dictionary(字典)

Python中的字典(dictionary)相当于Java中的Map,用”{ }”创建,是一个无序的键(key) : 值(value)对集合。 键(key)必须使用不可变类型,且在同一个字典中,键必须是唯一的。

dict = {}
dict['one'] = "1 - ABCD"
dict['one'] = "1 - abcd" #相当于java中Map的put,可以通过赋值添加或修改字典元素
dict[2]     = "2 - efgh"

tinydict = {'name': 'Tom','age':18}

print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值123456789101112

输出结果:

1 - abcd
2 - efgh
{'name': 'Tom', 'age': 18}
dict_keys(['name', 'age'])
dict_values(['Tom', 18])12345

(7)数据类型转换

直接将数据类型作为函数名即可,十分方便。如:

a=”12345”
b=int(a)
print (b)123

(8)总结

数据类型 分为数字型和非数字型。 数字型包括整型,长整型,浮点型,复数型; 非数字型包括字符串,列表,元组和字典 ; 列表用 “[ ]” 标识类似 C 语言中的数组; 元组用 “( )” 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表; 字典用 “{ }” 标识。字典由索引 key 和它对应的值 value 组成,相当于Java里的Map。 非数字型的共同点:都可以使用切片、链接(+)、重复(*)、取值(a[])等相关运算; 非数字型的不同点:列表 可以直接赋值,元组不可以赋值,字典按照 dict[k]=v 的方式赋值。


三、运算符

1、算数运算符

Python和Java都有: +-*/(加减乘除)%(取模) Python新加: **(幂)//(取整除) 注:Python2中除法(/)和java,C++中一样,整数/整数=整数 Python3中除法(/)总是返回一个浮点数,要获取整数使用(//)操作符

print (2/4) # 除法,得到一个浮点数(Python3) 
0.5 
print (2//4) # 除法,得到一个整数 
01234

2、比较运算符

Python和Java都有: ==(等于)!=(不等于)>(大于)<(小于)>=(大于等于)<=(小于等于) 注:Python2中有<>(不等于),Python3中没有

3、赋值运算符

Python和Java都有: =(赋值)+=(加法赋值)-=(减法赋值)*=(乘法赋值)/=(除法赋值)%=(取模赋值) Python新加: **=(幂赋值)//=(取整除赋值) Python移除: ++(自增运算符)—(自减运算符)

4、位运算符

Python和Java都有: &(按位与)|(按位或)^(按位异或)~(按位取反)«(左移)»(右移)

5、逻辑运算符

Python自成一体: and(布尔与)or(布尔或)not(布尔非)

6、成员运算符

Python自成一体: in(如果在指定的序列中找到值返回 True,否则返回 False) not in(如果在指定的序列中没有找到值返回 True,否则返回 False)

7、身份运算符

Python自成一体: is (判断两个标识符是不是引用自一个对象) is not (是判断两个标识符是不是引用自不同对象) 注:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

8、优先级

与Java基本相同: [幂]>[按位取反]>[*,/,%,//]>[+ -]>[»,«]>[&]>[^,|]>[<=,<,>,>=]>[<>,==,!=]>[赋值运算符]>[身份运算符]>[成员运算符]>[逻辑运算符]

未完待续…

C、C++、Python和Java四种是通用编程语言,JavaScript和PHP算是Web环境的专用编程语言。C语言由于其底层操作特性和历史的积累,在嵌入式领域是当之无愧的王者;C++是一种支持最广泛编程范式的复杂语言,这些年来发展不太好,目前在服务器后台和游戏领域还有其一席之地;Python作为一种灵活的轻便的通用型脚本语言,使用范围比较广,从应用软件到Web开发都有它的身影,由于其解释语言的特点,比较适合轻量级或原型开发;JavaScript语言由于其是浏览器内置的脚本语言,是Web前端开发的主流,近年来由于google的V8引擎开源,出现了Node.js之类JavaScript后台开发框架,把JavaScript的应用领域扩展到了Web后台;PHP作为一种简单的Web服务器后台脚本语言,在全世界范围内的网站上有最大的使用率;Java由于其跨平台可移植性,在Web开发领域大放异彩,特别是在企业级Web开发,同时由于Android系统采用Java来开发应用程序,所以也随着Android的发展而应用越发广泛。

​ 理清不同语言间主要语法特性的差异,才能更好的在合适的领域或场景下去应用合适的编程语言,以满足我们所面对的需求。这六种语言都是从C语言发展而来,所以它们的语法都比较像C语言,下面我就主要语法特性对各个语言做一个对比。

1、常量定义

C:#define TEST 0

C++:#define TEST 0

或者

const test = 0;

Python:test = 0

JavaScript:不支持

PHP:define(’test’, 1);

Java:final int test = 0;

分析:JavaScript不支持常量,C、C++都用特有的预定义宏,PHP用特殊的define语法,其它的都用定义不变变量的方式。

2、变量定义

C:int test = 0;

C++:int test = 0;

Python:test = 0

JavaScript:val test = 0;

PHP:$test = 0;

Java:int test = 0;

分析:这个最基本的都支持了。

3、函数定义

C:int test(int param){}

C++:int test(int param){}

Python:def test(param):

JavaScript:function test(param){}

PHP:function test($param){}

Java:public class test{

public int test(int param){} }

分析:这个也是最基本的了,只是Java比较特殊,不支持定义类之外的函数。

4、类定义(含继承)

C:不支持

C++:class test2: public test1{}

Python:class test2(test1):

JavaScript:function test2(){}

test2.prototype =inherit(test1.prototype){}

PHP:class test2 extend test1{}

Java:class test2 extends test1{}

分析:C由于是传统面向过程的语言不支持类,其他的都支持了,只是JavaScript的类模型比较特殊,把函数作为类来使用。

5、对象定义

C:不支持

C++:test2 obj = new test2();

Python:obj = test2()

JavaScript:var obj = new test2();

PHP:$obj = new test2();

Java:test2 obj = new test2();

分析:除了C外其它语言都是通过new一个对象。

6、数组定义

C:int a[] = {1, 2, 3};

C++:int a[] = {1, 2, 3};

Python:a = [1, 2, 3]

JavaScript:var a = [1, 2, 3];

PHP:$a = array(“1”, “2”, “3”);

Java:int a[] = {1, 2, 3};

分析:数组是语言的基本特性,都支持了,只是PHP通过类似函数调用的语法来完成。

7、条件语句

C:if (test > 0){}

else if (test < 0){}

else{}

C++:if (test > 0){}

else if (test < 0){}

else{}

Python:if test > 0:

elif test < 0:

else:

JavaScript:if (test > 0){}

else if (test < 0){}

else{}

PHP:if ($test > 0){}

elseif ($test < 0){}

else{}

Java:if (test > 0){}

else if (test < 0){}

else{}

分析:这是最基本的语句,都支持了。

8、循环语句

C:for (idx=0; idx<num; idx++){}

C++:for (idx=0; idx<num; idx++){}

Python:for idx in range(1,10):

JavaScript:for (var idx=0; idx<num; idx++){}

PHP:for ($idx=0; $idx<$num; $idx++){}

Java:for (idx=0; idx<num; idx++){}

分析:这个也是基本的语句,都支持了。

9、foreach语句

C:不支持

C++:不支持

Python:for i in a:

或者

for key in d:

d[key]

JavaScript:for(i in a){}

PHP:foreach($a as $i){}

Java:for(int i : a){}

分析:foreach算是循环语句的一个变种,在操作顺序容器的时候非常有用,可以看到C和C++不支持,其它的都语言内置支持了。

10、打印语句

C:printf(“test: %d”, val);

C++:cout«“test: “«val«endl;

Python:print “test: “+val

JavaScript:不支持

PHP:echo “test: $val”;

Java:System.out.println(“test :"+val);

分析:打印算是语言所运行环境的支持库功能,除了JavaScript外都支持了,因为JavaScript主要使用来操控DOM树的,没有自己的输出窗口所以也没必要支持。

11、字符串定义

C:char test[] = {“helloworld”};

C++:String test = “helloworld”;

Python:test = “helloworld”

JavaScript:var test = “helloworld”;

PHP:$test = “helloworld”;

Java:String test = “helloworld”;

分析:这个都支持了,其中C++、Java都是用标准库来现实的。

12、字符串串接

C:test = strcat(test1, test2);

C++:test = test1 + test2;(STL库)

Python:test = test1 + test2

JavaScript:var test = test1 + test2;

PHP:$test = $test1 .= $test2;

Java:test = test1 + test2;

分析:很有用的功能,除了C是用标准库函数来实现,其它都是语言内置支持了。

13、字符串分割

C:不支持

C++:test.substr(3, 8);

Python:test[3:8]

JavaScript:test.slice(3, 5);

PHP:substr($test, 3, 5);

Java:test.substring(3, 8);

分析:常用的功能,C不支持,Python是语言内置支持,其他的都依靠库来完成。

14、字符串正则表达式

C:不支持

C++:不支持

Python:test.replace(“test1”, “test2”)

JavaScript:test.replace(/test1/gi, “test2”);

PHP:str_replace($test, “test1”, “test2”);

Java:test.replaceAll(“test1”, “test2”);

分析:常用的功能,可惜C、C++不支持,其他都有标准库来支持。

15、内置容器类型

C:数组

C++:数组

顺序容器 Vector

关联容器 Pair MapSet

Python:列表/元组

字典

JavaScript:数组

对象

PHP:数组(含关联数组)

Java:数组

序列 Collection

映射表 Map

分析:C最简单只支持数组,其他都支持容器,不过主要还是顺序容器和关联容器两大类。

16、注释方式

C:/* */

C++://

Python:#

JavaScript:/* */

//

PHP:/* */

//

#

Java:/* */

//

分析:大概就/**/、//、#三种方式,各自支持情况不一。

17、多线程支持

C:支持

C++:支持

Python:支持

JavaScript:不支持

PHP:不支持

Java:支持

分析:四种通用编程语言都支持了,两种专用编程语言都不支持。

18、socket支持

C:支持

C++:支持

Python:支持

JavaScript:不支持

PHP:支持

Java:支持

分析:除了JavaScript以外都支持,这也是JavaScript的应用领域限制所决定的。

19、垃圾回收机制

C:不支持

C++:不支持

Python:支持

JavaScript:支持

PHP:支持

Java:支持

分析:这是现代语言的重要机制,C和C++不支持,其他的都支持了。

20、引入其他文件中的函数

C:export int test();

C++:export int test();

Python:from test import *

JavaScript:<script language=‘javascript’ src=“test.js"charset=“utf-8”>

PHP:require_once(’test.php’);

或者

include_once(’test.php’);

Java:import java.util.test.*;

分析:都支持,C和C++用export,Python和Java用import,JavaScript依靠HTML脚本,PHP用自己的函数调用。

21、将字符串作为指令执行

C:不支持

C++:不支持

Python:eval(“port=5060”)

JavaScript:eval(“port=5060;”);

PHP:eval(“port=5060;”);

Java:Porcess proc = new ProcessBuilder(“test”).start();

分析:很有用的一个动态语言特性,C和C++都不支持,Java要类库来支持,其它的语言内置eval关键字来支持。