老宋的地盘

 找回密码
 我要加入
搜索
老宋 首页 文章 技术 查看内容

python 2.x和python 3.x 有哪些主要的区别?

2022-7-13 00:00| 发布者: herosrx| 查看: 341| 评论: 0

摘要: 1、源码的区别py2x:源码比较混乱,重复代码较多,冗余py3x: 源码崇尚优美,代码清晰简单2、用户交互的区别:py2x:python2中input的到的数据类型为int型,Python2x是 raw_input()得到是str字符串,py3x python3x中 ...

1、源码的区别
py2x:源码比较混乱,重复代码较多,冗余
py3x: 源码崇尚优美,代码清晰简单

2、用户交互的区别:

  1. Python 2.x 中,
    1. raw_input 会将所有输入的数据当作字符串看待,返回值为字符串类型。
    2. input 输入时必须是一个合法的 Python 表达式,格式与 Python 中的代码一样,其返回值与输入的数据类型相同。
    3. 如果是 Python 2.x 版本,那么 input 和 raw_input 都可以使用。
  2. Python 3.x 中
    1. 只能使用 input返回值为str。因此,建议都使用 input 函数。

3、print的区别:

  1. python2x中,print时加()或者加引号"",print是个语句
  2. python3x中,print时必须加(),print变成了函数


4、默认编码的区别:

  1. Python 2.x 中,默认使用 ASCII编码,Python 2.x默认是不支持中文的,且变量命名只能用英文。要想支持中文,需要在首行加上: # -*-coding:UTF-8 -*-
  2. Python 3.x 中,默认使用 UTF-8的编码,所以 Python 3.x 默认是支持中文的,且变量命名能够使用中文。如果在 Python 文件中不用指定头信息 # -*-coding:utf-8-*-。

5、类的区别:

  1. python2.x中,类没有继承object的都是经典类遵循深度优先算法,继承object才是新式类,遵循广度优先算法。
  2. python3.x中,所有类都是新式类,遵循广度优先算法,有mro方法。

6、super()的区别:

  1. 首先python2.x和python3.x中都有super()方法
  2. python2.x中,类中有super方法,但是必须传参数(子类名,子类对象)
  3. python3.x中,的类中是直接调用无序传参

7、Ture和False 的区别:

  1. python2.x中,True 和 False 在 Python2 中是两个全局变量,可以为其赋值或者进行别的操作, 初始数值分别为1和0,虽然修改是违背了python设计的原则,但是确实可以更改.
  2. python3.x中,修正了这个变量,True或False不可变,不可以重新赋值。

8、迭代器的区别:

  1. python2.x中,许多返回列表的方法,如range,字典对象的 dict.keys()、dict.values() 方法, map、filter、zip; 并且迭代器必须实现next方法
  2. python3.x中,将返回列表的方法改为了返回迭代器对象,内置了__next__,不用特意去实现next

9、xrange函数

xrange 可以生成序列。

  1. 在 Python3.x 中,取消了 xrange 函数,而使用 range 完全代替了 xrange 函数。在 Python 3.x 中调用 xrange 函数会报错。
  2. 在 Python2.x 中,xrange() 函数用法与 range() 函数完全相同,所不同的是生成的不是一个列表,而是一个生成器。

10、nonlocal的区别:

  1. Python2.x中,没有nonlocal,没有办法在嵌套函数中将变量声明为一个非局部变量,只能在函数中声明全局变量,字符串区别: py2x: unicode类型表示字符串序列,str类型表示字节序列
  2. Python3.x中,nonlocal将变量声明为一个非局部变量 11,字符串区别: py3x: str类型表示字符串序列,byte类型表示字节序列

12、除法的变化

  1. 在Python 2.x中,对于/算法,整数相除的结果是一个整数,它会把小数部分完全忽略掉,浮点数除法会保留小数点的部分,得到一个浮点数的结果。
  2. 在Python 3.x中,/除法不再这么做了,整数相除的结果也会是浮点数。
  3. py2x: 1/2返回0  py3x: 返回0.5,没有了int和long的区别。
  4. Python 3.x 去除了 long 类型,现在只有一种整型 int,但它的行为与 2.x 版本的 long 相同。还新增了 bytes 类型,对应于 2.x 版本的八位串,定义一个 bytes 字面量的方法如下:str 对象和 bytes 对象可以使用 .encode()和 .decode()方法相互转化。
  5. Python 中的除法有两个运算符:/和//。对于 //除法,这种除法被称为 floor除法,它会对除法的结果自动进行一个 floor操作,在 Python 2.x 和 Python 3.x 中是一致的。需要注意的是,//并不是舍弃小数部分,而是执行 floor操作。如果要截取整数部分,那么需要使用 math模块的 trunc函数。

13、比较运算符的区别

  1. 在 Python 2.x 中,不等于可以有两种写法,分别是 !=和 <>
  2. 在 Python 3.x 中去掉了 <>只有 !=一种写法。

14、八进制字面量表示

在 Python 3.x 中,表示八进制字面量的方式只有一种,那就是 0o1000,而 Python 2.x 中的 01000形式已经不能使用了。

15、去掉了 repr 表达式 “

在 Python 2.x 中反引号相当于 repr函数 (返回一个对象的 string 格式) 的作用。在 Python 3.x 中去掉了 “这种写法,只允许使用 repr函数,这样做的目的是为了使代码看上去更清晰。

15、打开文件

在 Python 2.x 中使用 file(…) 或者 open(…) ,而在 Python 3.x 中只能使用 open(…)

16、 map、filter 和 reduce

在 Python2.x 的交互模式下输入map和filter,可以看到它们两者的类型是 built-in function(内置函数)

它们输出的结果类型都是列表:

但是在 Python3.x 中发生了变化:

首先它们从函数变成了类,其次,它们的返回结果也从列表变成了一个可迭代的对象,可以尝试使用 next 函数来进行手工迭代:

对于比较高端的 reduce 函数,它在 Python3.x中已经不属于 built-in function,而是被挪到了 functools 模块当中。


路过

雷人

握手

鲜花

鸡蛋
上一篇:UTF8 转码为 GBK下一篇:python 保留字

相关阅读

最新评论

歌名 - 歌手
0:00

    QQ|手机版|小黑屋|老宋 ( 备案中... )

    GMT+8, 2024-4-24 15:11 , Processed in 0.149426 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    返回顶部