python2与python3的一些区别

数据类型之间的区别

整数

Python 2.x版本中整数分为一般整数和长整数。

1
2
3
4
5
6
7
8
>>> 2**31
2147483648L
>>> 2**30
1073741824
>>> 2**30-1+2**30
2147483647
>>> 2**31-1
2147483647L

这个是在Python 2.7.13版本的结果。每个版本会有一些不同。在这个版本中一般整数是32bit的(符号位占1bit)。当超过32bit,会在后面加L。一些版本有可能是64bit,这个看具体的版本。

但是在Python 3.x就没有这种区分,整数只有一个类型。

1
2
3
4
>>> 2**31
2147483648
>>> 2**63
9223372036854775808

这个是在Python 3.6.2版本的结果,可以证实Python 3.x的整数跟Python 2.x是有区别的

函数之间的区别

round()

round()之四舍五入

  • Python2.x
1
2
3
4
>>> round(2.5)
3.0
>>> round(3.5)
4.0

可以看出python2.x版本的结果跟我们的预想的一样,函数的返回结果还是浮点数

  • Python3.x
1
2
3
4
>>> round(2.5)
2
>>> round(3.5)
4

从结果上看,在python3.x中,这个函数是有变化的,函数的返回结果变成是整数,而且当要舍弃的数值正好为5(中间)时,会取接近的偶数值。例如:

1
2
3
4
>>> round(2.5)
2
>>> round(4.5)
4

len()

  • Python2.x
1
2
3
4
5
6
7
>>> len('中文')
4
>>> len(u'中文')
2
>>> a='中文'
>>> a
'\xd6\xd0\xce\xc4'
  • Python3.x
1
2
3
4
5
>>> len('中文')
2
>>> a='中文'
>>> a
'中文'

从结果可以看出,len()的结果跟字符串默认编码有关。

在Python 3.x里默认是使用Unicode方式存储字符串。
在Python 2.x里默认是使用Latin-1方式存储字符串,因此不能直接识别中文。

坚持原创技术分享,您的支持将鼓励我继续创作!