Python与java语言的一些区别
本博客部分内容是摘自其他博客的内容,具体链接我也忘记,忘多包涵
1、 数
python 只有 4 种类型的数:整数,长整数,浮点数和 java 中没有的复数;
java 则有 char , short,byte , int , long , float,double 类型 ;
2 、字符串
python 没有表示单个字符的 char 类型,可以用单引号,双引号来表示一个常量字符串,也可以用三引号 (''' 或者 “”“) 来表示一个多行的字符串;
java 用 char 来表示单个字符,用 String 类表示一个字符串,常量字符串由双引号表示;
当一个字符串在一行表示不下, python 中在行尾加一个反斜杠 (\) ,表示字符串在下一行继续; java 用加号 (+) 连接;
python 中还有可以在字符串前加前缀 r 或 R :表示自然字符串,即不对字符串做转移处理 ( 比 java 方便 ) ;还可以加前缀 u 或 U :表示 unicode 字符串;
python 字符串实际上是有序的字符集合,支持索引,分片操作,类似于 List 操作等。
3 、缩进
python 用缩进来识别语句间的逻辑层次;
java 主要用花括号和分号来识别,不强制缩进;
4 、 操作符
python 用
** :表示幂符号,如 x**y 表示 x 的 y 次方;
// :表示整除,即商的整数部分;
~ :按位翻转, ~x 就是 -(x+1)
以上这些都是 java 中没有的 , 但是 python 没有自增 , 自减运算符,并且 python 用 and , or , not 表示逻辑与,或,非。
5 、 if 语句
python 的 if 语言的条件表达式可以不接括号,和 java 不同的是, else if 在 python 中写作 elif ,并且在 if , elif , else 语句后面需要加冒号;
python 中没有 switch 语句,需要用 if 来代替;
6 、 while 语句
python 的 while 语句和 java 的最大不同是, while 语句可以接 else , else 语句块在循环条件不满足时执行。 ( 这个是不是有点多余呀,循环条件不满足,程序不也是执行 while 块后面的语句嘛! )
While True :
if 条件语句: break
7 、 for 语句
python 的 for 语句与 java , c,c++,c# 中传统的 for 语句都不一样,它用 in 把表示变量的范围,类似 java 中的 foreach ;和 while 一样,也可以接 else 块;
for 和 while 中,如果被 break 中断,将不执行 else 语句块;循环中还支持 if not in 之类的
8 、 函数
函数只需要 def 函数名字(参数列表):
返回数据支持多个数据,也就是元组(参数 1 ,参数 2 ,参数 3 ,参数 4 ),也可以不返回数据默认返回 non
9 、注释
python 中以 '#' 开始的行为注释(貌似很多脚本语言都喜欢用 # 做注释,还有 ”” “”” 三个双引号是多行的注释);
java 中主要是 "//" 和 " /* .... */ " ;
注意 python 的注释还很版本有关系,自己尝试的时候需要注意
10 、类的定义
构造函数是def __init__(self, 参数): 所有类的函数都需要在函数参数列表中加一个self ,类似于java 语言的this
11 、类私有方法
如果一个 Python 函数,类方法,或属性的名字以两个下划线开始 ( 但不是结束 ) ,它是私有的;其它所有的都是公有的。 Python 没有类方法保护 的概念 ( 只能用于它们自已的类和子类中 ) 。类方法或者是私有 ( 只能在它们自已的类中使用 ) 或者是公有 ( 任何地方都可使用 )
12 、无处不在的异常处理
- 使用不存在的字典关键字 将引发 KeyError 异常。
- 搜索列表中不存在的值 将引发 ValueError 异常。
- 调用不存在的方法 将引发 AttributeError 异常。
- 引用不存在的变量 将引发 NameError 异常。
- 未强制转换就混用数据类型 将引发 TypeError 异常。
Python 使用 try...except 来处理异常,使用 raise 来引发异常。 Java 和 C++ 使用 try...catch 来处理异常,使用 throw 来引发异常
13 、垃圾回收机制
如果说创建一个新的实例是容易的,那么销毁它们甚至更容易。通常,不需要明确地释放实例,因为当指派给它们的变量超出作用域时,它们会被自动地释放。内存泄漏在 Python 中很少见。
判断一个对象是否销毁:sys.getrefcount(obj)
Some common situations that may prevent the reference count of an object from going to zero include: circular references between objects (e.g., a doubly-linked list or a tree data structure with parent and child pointers); a reference to the object on the stack frame of a function that caught an exception (the traceback stored in sys.exc_traceback keeps the stack frame alive); or a reference to the object on the stack frame that raised an unhandled exception in interactive mode (the traceback stored in sys.last_traceback keeps the stack frame alive).
14、常见的语法操作
1 、常用的语法是:类的构造、需要特别熟练 python 中三个内置对象,分别是 list ()、 dict() 、 tuple 这三个在开发中经常需要用到,具体的用法在这里就不阐明了,下面是一本比较好入门的书籍: http://www.woodpecker.org.cn/diveintopython 《 dive into python 》
2 、时间类的操作分别为 datetime.datetime,time 这两个对于时间的操作
3 、模块的导入 : f rom module import 的基本语法:
from UserDict import UserDict
它与你所熟知的 import module 语法很相似,但是有一个重要的区别:UserDict 被直接导入到局部名字空间去了,所以它可以直接使用,而不需要加上模块名的限定。你可以导入独立的项或使用 from module import * 来导入所有东西。
什么时候你应该使用 from module import ?
- 如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用 from module import 。
- 如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import 。
- 如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突。
15、开发中注意的地方
- 字符串的连接问题, python 在连接字符串是用 + ,注意类型必须是一致的即字符串不能和数字连接否则就报错,所有的类型必须转换为字符串使用 str ()
如果字符串转换对应的类型就用类型强制转换,如: float ()
- 内置函数: __cmp__ : == __len__ :len ()
__delitem__ :del instance[key]
- 在 Java 中,通过使用 str1 == str2 可以确定两个字符串变量是否指向同一块物理内存位置。这叫做对象同一性 ,在 Python 中写为 str1 is str2 。在 Java 中要比较两个字符串值,你要使用 str1.equals(str2) ;在 Python 中,你要使用 str1 == str2
- 数据属性和类属性 class FileInfo(dict): 继承
Python 支持数据属性 ( 在 Java 和 Powerbuilder 中叫做 “ 实例变量 ” ,在 C++ 中叫 “ 数据成员 ”) ,它是由某个特定的类实例所拥有的数据。在本例中,每个 UserDict 实例将拥有一个 data 数据属性。要从类外的代码引用这个属性,需要用实例的名字限定它, instance .data ,限定的方法与你用模块的名字来限定函数一样。要在类的内部引用一个数据属性,我们使用 self 作为限定符。习惯上,所有的数据属性都在 __init__ 方法中初始化为有意义的值。然而,这并不是必须的,因为数据属性,像局部变量一样,当你首次赋给它值的时候 突然产生
类属性既可以通过直接对类的引用,也可以通过对类的任意实例的引用来使用,
在 Java 中,静态变量 ( 在 Python 中叫类属性 ) 和实例变量 ( 在 Python 中叫数据属性 ) 两者都是紧跟在类定义之后定义的 ( 一个有 static 关键字,一个没有 ) 。在 Python 中,只有类属性可以定义在这里,数据属性定义在 __init__ 方法中
在 Python 中没有常量。
- 基于 dictionary 的字符串格式化介绍
- params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} "%(pwd)s" % params 'secret'