写在前面
大部分程序设计语言在基本语法上面大致都是相通的,根据已掌握的语言对比学习一门新的语言,将是一个高效的学习方式。在学习新语言的时候,只需要重点关注和记忆它特有的语言特性,并在实践中多加运用,然后再深入学习它的组件、框架等内容,想必是可以快速掌握这门新的语言的。
下面是我在刚接触python这门语言的时候,与Java的简单对比学习的笔记内容,目标在于总结这两种语言在语法上的不同点,对语法特性的原理不作深入探索和分析。希望对你有帮助。
数字与字符串
数值运算
除法运算
Java整数除法运算结果只取整数部分
python整数除法运算总是返回浮点数,
python 使用//运算,对除法运算结果进行取整。
幂运算
Java的幂运算需要使用java.lang.Math类的pow(double,double)方法
python直接使用运算符**
复数
Java没有对复数的语法支持,需要自定义复数类
python有对复数的语法支持,如 plu = 3+4j
字符串操作
java 用""包含字符串常量,java中的字符串常量实质上是一个不可变的String对象,可以调用String对象的length()方法获取字符串常量的长度。
python可以用'' 和 "" 包含字符串常量,也可以用 '''...''' 和 """...""" 包含多行文本。可以像操作字符数组一样操作python字符串,可以使用负数索引,表示从后往前索引。可以调用内置函数len()获取字符串长度。python字符串还支持切片操作。
流程控制
if 语句
Java的基本条件控制语法为:
1 | if(condition){ |
python 的基本条件控制语法为:
1 | if condition : |
另外Java使用 switch..case 语法来控制多条件分支的情况,python 使用 if..elif..elif 处理多条件分支,同样很方便。
for 语句
java 中的 for 语句有两种形式:
1 | //形式一: |
1 | //形式二: |
python中 for 语句的语法形式为:for item in iterators,这跟 Java的形式二相似。其中有一点需要注意的是:如果 iterators 使用切片,则会对其进行一个浅拷贝,这样item每次就会取浅拷贝的内容进行处理。在循环中如果需要对iterators进行变更的,需要作浅拷贝处理。
例如:
1 | words=['this','is','python'] |
以上代码的输出结果是:[‘python’, ‘this’, ‘this’, ‘is’, ‘python’]
现在把代码变成:
1 | words=['this','is','python'] |
以上代码将陷入死循环。
值得注意的是,python 提供了一个内置函数range(),它会按照规定的范围和步长生成一个序列
1 | list(range(10)) #输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
python 的 for 语句还可以配合 else 使用,for循环中的语句没有执行break,则 else 语句将不会执行,反之亦然。代码如下:
1 | for n in range(2, 10): |
以上代码执行结果为:
1 | 2 is a prime number |
函数定义
Java中的函数定义很固定:访问范围+是否静态+是否final+返回类型+函数名+(参数类型 参数名,参数类型2 参数名 ,...),例如:
1 | public static void main(String[] args){ |
访问范围:public,private,protected 和 默认(不指定则表示是默认的作用域,在同一个包内的类能够访问)
是否静态:用static关键字申明,如果是‘static’,表示该方法为类方法,否则为成员方法。
是否final:用final关键字申明,如果是‘final’,则表示该方法不可被继承。
返回类型:返回类型可以是void,Java定义9种简单数据类型,Java类。
一般情况下,Java函数的参数都是固定的N(N>=0)个参数,按照 effective java 的建议,参数的个数最好不要超过4个。
当函数的所有参数都是同一个类型的时候,Java支持可变参数的申明形式,如下:
1 | public static void main(String...args){ |
python 中定义函数的语法形式为:def+函数名+(参数,参数,...,参数=缺省值),例如:
1 | def ask_ok(prompt, retries=4, reminder='Please try again!'): |
说明:python在定义函数的时候,函数的参数列表是可以指定缺省值的。当指定了缺省值,在调用函数的时候,指定缺省值的参数就成为了非必传参数了。