Summary:
本文不会详细讲解python基础知识,主要重点描述一些我个人认为较重要并且容易弄混的概念,特别是和java的比较。
Conditions:
1、熟悉python基础语法。
2、熟悉java基础语法。
3、熟悉python数据结构和语句。
Point 1: 数据类型定义
强类型:java
1)java定义变量需要指定数据类型,比如
String username ="zhangsan";
System.err.println(username);
弱类型:python、JavaScript、scala
1)python不需要指定数据类型,程序解释的时候会自动判断
>>> username = "zhangsan"
>>> print(username)
zhangsan
2)JavaScript在所有变量前加var关键字,如 var username=“张三”。
Point 2: 代码段区分
1)java代码段通过大括号{}来区分,单行代码用";"区分。
2)python通过缩进区分,缩进空格数量没有具体规定,但建议是一个tab。单行代码不需要用";"区分。
def myFun():
username ="zhangsan"
print("my name is %s"%username)
myFun()
Point 3: for循环
java有两种循环方式:
1)类似C语言那种
public class article {
public static void main(String[] args){
for(int i=0;i<10;i++){
System.err.println(i);
}
}
}
2)java5.0开始的增强for循环
public class article {
public static void main(String[] args){
List list =new ArrayList();
list.add("zhang");
list.add("li");
list.add("huang");
for(String li : list){
System.err.println(li);
}
}
}
python循环方式
fruits = ["apple","banana","pear",""]
for fruit in fruits:
print(fruit)
注:python对循环数字的处理方式,如
for i in range(1,10,2):
print(i)
Point 4: 异常处理
1)java是try...catch...finally
public class article {
public static void main(String[] args){
try{
System.out.println("try.....");
int a =1/0;
}catch (ArithmeticException a){
a.printStackTrace();
System.out.println("ArithmeticException.....");
}catch (Exception e){
e.printStackTrace();
System.out.println("Exception.....");
}finally {
System.out.println("finally.....");
}
System.out.println("如果异常被正确捕获,执行我");
}
}
2)python是try...exception...else...finally
try:
print("try......")
1/0
except ZeroDivisionError:
print("ZeroDivisionError")
except Exception:
print("Exception")
else:
print("如果没有异常发生,就执行我else......")
finally:
print("无论如何,都要执行finally......")
print("如果异常被正确捕获,执行我")
Point 5: 多态
1)java
多态是同一个行为具有多个不同表现形式或形态的能力,多态就是同一个接口,使用不同的实例而执行不同操作。多态存在的三个条件:
1.1、继承
1.2、重写
1.3、父类引用指向子类对象
比如:Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
2)python
python是没有接口概念的,所以多态也有别于java。
class Animal(object):
def __init__(self):
print("this is Animal __init__")
def show(self):
print("show method animal.....")
class Cat(Animal):
def __init__(self):
print("this is Cat __init__")
def show(self):
print("show method cat......")
def cal(self):
print("private method cal......")
cat = Cat()
cat.show()
cat.cal()
运行结果:
this is Cat __init__
show method cat......
private method cal......
注:本例中虽然父类和子类都有show方法,但我本人认为这不是重写override,而只是属于不同作用域的同名方法。
Point 6: 文件处理
python对文件的处理比java简单许多,如下图是java操作IO的一些API,就不代码演示了
举个python读写文件的例子
with open("/Users/xieyuanzheng/Downloads/逍遥游", "w") as fo:
print("文件名: ", fo.name)
print("是否已关闭 : ", fo.closed)
print("访问模式 : ", fo.mode)
执行结果:
文件名: /Users/xieyuanzheng/Downloads/逍遥游
是否已关闭 : False
访问模式 : w
Point 7:键盘输入值
1)java
public class article {
public static void main(String[] args){
Scanner scan =new Scanner(System.in);
System.out.println("请输入:");
if(scan.hasNext()){
String input = scan.next();
System.out.println(input);
}
scan.close();
}
}
输出:
请输入:
hi,新年好!
hi,新年好!
2)python,有两种方法
2.1 raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)
str = raw_input("请输入:")
print "你输入的内容是: ", str
注意两点:一是此方法只有python2才有,python3已取消;二是返回值是string类型,如果输入是数字,需要做类型转换。
2.2 input([prompt]) 函数和 raw_input([prompt]) 函数基本类似,但是 input 可以接收一个Python表达式作为输入,并将运算结果返回。
str =input("请输入:")
print(eval(str))
执行结果:
请输入:[x+2 for x in range(1,10,2)]
[3, 5, 7, 9, 11]
Point 8: 方法和函数的区别
如下python代码图所示,从功能上来讲,函数和方法是没有区别的。函数可以脱离类而存在,但方法不行,而java中方法是必须依附于类而存在,所以java只有方法而没有函数,python方法和函数皆有。