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关键字来支持。