python2和3的区别汇总

这个是肯定需要说明的,当我知道python2和3的区别第一个知识点可能就是print

1
2
3
4
5
6
7
8
9
# python2 我们这样使用
print 123
print a,b,c
print >>sys.stderr,something # python2 >>pipe_name语法,把输出重定向到一个管道,比如sys.stderr
# pyhton3 我们这样使用
print(123)
print(a,b,c)
print(something,file=sys.stderr) #python 管道作为关键字参数file的值传递给print()来完成同样的功能
print(a,b,c,end = '\n') #python 这是在python3 里面采用的 end 可以从字面意思理解为“结尾符” 默认肯定是'\n'

unicode

当我第一次使用python时候,加入中文注释就会出现

1
Non-ASCII character '\xe4' in file 2 on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

我们在python2 中写东西 一般都会在文件开始加入 coding: utf-8 指定文件编码格式
在python3中只有一种字符串类型Unicode字符串,可能就是在这个原因python3就没有unicode()这个函数了,因为不需要了

long 长整型

这个我相信很多语言都有long 这个数据格式,
python有为非浮点数准备的int和long类型。int类型的最大值不能超过sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。
在Python 3里,只有一种整数类型int,大多数情况下,它很像Python 2里的长整型。由于已经不存在两种类型的整数,所以就没有必要使用特殊的语法去区别他们。
(再也看不到x=000000000000L <-这个结尾的L了),当然long()这个函数在python3中也是没有的,也就没有必要isinstance(x,long)去判断了

dict 字典的区别

python3中的字典没有has_key()这个方法了,我目前的用的方法如下:总是觉得有点笨,有更好的方法请指正咕~~(╯﹏╰)b

1
2
3
4
5
x = {"tuzi":1,"luobo":2}
#python2 中判断x中是否有tuzi这个key
x.has_key("tuzi")
#python3中我目前这样用
if "tuzi" in x.keys()

pyc 和pycache

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。
比如我们有一个b.py 写了一些方法,然后再写一个a.py import b.py里的方法,这样在第一次执行的时候 就会生成一个b.pyc 除非b.py进行了修改否则b.pyc是不会更新的,在python2版本中,如果有多种这种情况,那么在目录下面就会生成多个pyc,看起来很乱,所以在python3中 你会发现所有的pyc文件被放到了一个
__pycache__ 目录中

不定时更新

文章目录
  1. 1. print函数
  2. 2. unicode
  3. 3. long 长整型
  4. 4. dict 字典的区别
  5. 5. pyc 和pycache
  6. 6. 不定时更新