python和Java对比学习笔记一

写在前面

大部分程序设计语言在基本语法上面大致都是相通的,根据已掌握的语言对比学习一门新的语言,将是一个高效的学习方式。在学习新语言的时候,只需要重点关注和记忆它特有的语言特性,并在实践中多加运用,然后再深入学习它的组件、框架等内容,想必是可以快速掌握这门新的语言的。

下面是我在刚接触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
2
3
4
5
6
7
8
9
if(condition){
statements;
}else if(condition2){
statements2;
}else if(conditionX){
statementsX;
}else{
statementsDefault;
}

python 的基本条件控制语法为:

1
2
3
4
5
6
7
8
if condition :
statements
elif condition2 :
statements2
elif conditions3 :
statements3
else :
statementsDefault

另外Java使用 switch..case 语法来控制多条件分支的情况,python 使用 if..elif..elif 处理多条件分支,同样很方便。

for 语句

java 中的 for 语句有两种形式:

1
2
3
4
//形式一:
for(int i=0 ; i<10 ; i++) {
statements;
}
1
2
3
4
5
//形式二:
String[] s1 = {"1","2","3","3"};
for(String ss : s1){
System.out.print(ss);
}

python中 for 语句的语法形式为:for item in iterators,这跟 Java的形式二相似。其中有一点需要注意的是:如果 iterators 使用切片,则会对其进行一个浅拷贝,这样item每次就会取浅拷贝的内容进行处理。在循环中如果需要对iterators进行变更的,需要作浅拷贝处理。
例如:

1
2
3
4
5
words=['this','is','python']
for word in words[:] :
if len(word)>2:
words.insert(0,word)
print(words)

以上代码的输出结果是:[‘python’, ‘this’, ‘this’, ‘is’, ‘python’]
现在把代码变成:

1
2
3
4
5
words=['this','is','python']
for word in words : #注意这里的区别
if len(word)>2:
words.insert(0,word)
print(words)

以上代码将陷入死循环。

值得注意的是,python 提供了一个内置函数range(),它会按照规定的范围步长生成一个序列

1
2
3
4
5
list(range(10)) #输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list(range(3,10)) #输出[3, 4, 5, 6, 7, 8, 9]

list(range(2,30,4)) #输出[2, 6, 10, 14, 18, 22, 26]

python 的 for 语句还可以配合 else 使用,for循环中的语句没有执行break,则 else 语句将不会执行,反之亦然。代码如下:

1
2
3
4
5
6
7
8
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
# loop fell through without finding a factor
print(n, 'is a prime number')

以上代码执行结果为:

1
2
3
4
5
6
7
8
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

函数定义

Java中的函数定义很固定:访问范围+是否静态+是否final+返回类型+函数名+(参数类型 参数名,参数类型2 参数名 ,...),例如:

1
2
3
public static void main(String[] args){
//statements;
}

访问范围publicprivateprotected默认(不指定则表示是默认的作用域,在同一个包内的类能够访问)
是否静态:用static关键字申明,如果是‘static’,表示该方法为类方法,否则为成员方法
是否final:用final关键字申明,如果是‘final’,则表示该方法不可被继承。
返回类型:返回类型可以是void,Java定义9种简单数据类型,Java类。

一般情况下,Java函数的参数都是固定的N(N>=0)个参数,按照 effective java 的建议,参数的个数最好不要超过4个。
当函数的所有参数都是同一个类型的时候,Java支持可变参数的申明形式,如下:

1
2
3
public static void main(String...args){
//statements;
}

python 中定义函数的语法形式为:def+函数名+(参数,参数,...,参数=缺省值),例如:

1
2
3
4
5
6
7
8
9
10
11
def ask_ok(prompt, retries=4, reminder='Please try again!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise ValueError('invalid user response')
print(reminder)

说明:python在定义函数的时候,函数的参数列表是可以指定缺省值的。当指定了缺省值,在调用函数的时候,指定缺省值的参数就成为了非必传参数了。

------ 本文结束 ------
TisaKong wechat
启发思维个人微信公众号
0%