最近在学习Python,感觉Python确实有她的魅力之处,与JAVA等其它OO语言对比,有其擅长处理的领域。虽然Python是解释型的语言,严格意义上不能和JAVA做对比,但我觉得在学习一个新事物时,与熟悉的事物比较,能更好的了解新事物的特点,从而了解其能真正做些什么。下面总结一些基础特性的对比,主要列出Python相对JAVA更有特色的语言特性。
1、运行
Python脚本能以更像应用程序的方式运行。
Linux平台下,可以在脚本受行添加#!/usr/bin/env python
用于显示地指定使用python解释代码,这种方式在unix中称作Shebang,具体用法可参考:
如果是windows,那么在正确安装了python后,可以直接双击脚本,会弹出cmd窗口,执行脚本,是不是很酷。
对比java的执行方式,通常需要通过批处理、或者做成可执行的jar、或通过第三方工具打包成exe的方式,这一点python显然来得更直接些,这表明其处理某些辅助工作会比java来的容易,例如在都安装了python的环境中,A开发了工具脚本,可以直接分发给B,在B的环境上直接运行,如果是JAVA恐怕要直接运行要做更多的事情,或者连同JRE一起传递过来。
2、列表操作
Python的序列类似于JAVA的List(形式上看可能更像数组),但序列本身又分多钟类型,我们仅拿列表做比较,Python的列表和JAVA的List有很多共同点:可以修改、通过索引访问等等,对于基本的操作,二者没有太大差别只是使用的方法不同而已如:
操作
JAVA
Python
添加值
list.add(num)
list.append(num)
删除指定索引的值
list.remove(numIndex)
del list (numIndex)
修改值
list.set(numIndex,num)
list [numIndex] = num
Size
list.size()
len(list)
扩展
list1.addAll(list2)
list1.extend(list2)
除了表格外的操作,其实还有很多,就不再列举,我们只关注一些JAVA不具备的操作,这些才是展现Python生产力的关键:
(1)分片,第一个索引是提取部分的第一个元素所以,第二个索引则是分片后的剩余部分的第一个元素索引:
>>>num = [1,2,3,4,5]
>>>num[2:4]
[3,4]
还可以指定步长如上例中,在第二个索引后再追加一个步长2,则分片中只会包含3,可以试着将步长设置大于索引的差,那默认只会以索引差为步长,也就是即使将步长设置为5(大于4-2),还是会以2作为步长:
>>>num[2:4:2]
[3]
(2)列表合并
显然Python来的更直接:
>>>[1,2,3] + [4,5]
[1,2,3,4,5]
(3)乘法
如果想简单的重复序列中的元素,可使用乘法运算:
>>> [1,2]*4
[1,2,1,2,1,2,1,2]
(4)插入元素,如果对JAVA的list插入元素要麻烦的很:
>>> num=[1,2,3]
>>> num.insert(2,7)
>>> num
[1,2,7,3]
3、语句块:缩进
JAVA中的缩进是会被编译器忽略的,只是为了提高代码可读性,但Python的缩进是会被解释器解释的,它用来决定语句块的范围。语句块是在条件判断语句执行后(如if)的一组语句,类似于JAVA中if语句后的大括号内的部分,Python用“:”标识语句块的开始,后面所有具有相同缩进量的语句被认为在一个语句块中,例如:
>>> i =1
>>>
ifi ==1:
print'is true'
print'i==1'
else:
print'i!=1'
istrue
i==1
4、迭代
除了类似JAVA的for in方式的迭代外,Python提供了zip的打包迭代方式,可以批量迭代列表(或其它序列)如:
>>> num1=[1,2,3]
>>> num2=[4,5,6]
>>> zip(num1,num2)
[(1,4), (2,5), (3,6)]
再通过for遍历:
>>>fornum1v,num2vinzip(num1,num2):
print'num1 value is',num1v,'num2 value is',num2v
num1 value is1num2 valueis4
num1 value is2num2 valueis5
num1 value is3num2 valueis6
5、方法参数
Python提供以一种不用按照顺序输入函数参数的方式,用起来很有趣,对于参数很多的函数,
我们就不用记住参数的顺序,用起来很方便:
defshowInfo(name, desc):
print"Name is",name,",Description is",desc
showInfo(name='sml',desc='"It is a hero"')
>>>
Name issml ,Descriptionis"It is a hero"