Python2与Python3的区别

Python2与Python3的区别

1) 核心类差异

  1. Python3 对 Unicode 字符的原生支持。
    Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类型 str 和 unicode,Python3 只
    支持 unicode 的 string。Python2 和 Python3 字节和字符对应关系为:

    python2python3表现转换作用
    strbytes字节encode存储
    unicodestr字符decode显示
  2. Python3 采用的是绝对路径的方式进行 import
  3. Python2中存在老式类和新式类的区别,Python3统一采用新式类。新式类声明要求继承object,
    必须用新式类应用多重继承
  4. Python3 使用更加严格的缩进。Python2 的缩进机制中,1 个 tab 和 8 个 space 是等价的,所
    以在缩进中可以同时允许 tab 和 space 在代码中共存。这种等价机制会导致部分 IDE 使用存在问题。
    Python3 中 1 个 tab 只能找另外一个 tab 替代,因此 tab 和 space 共存会导致报错:TabError:
    inconsistent use of tabs and spaces in indentation.

2) 废弃类差异

  1. print 语句被 Python3 废弃,统一使用 print 函数

  2. exec 语句被 python3 废弃,统一使用 exec 函数

  3. execfile 语句被 Python3 废弃,推荐使用 exec(open("./filename").read())

  4. 不相等操作符"<>"被 Python3 废弃,统一使用"!="

  5. long 整数类型被 Python3 废弃,统一使用 int

  6. xrange 函数被 Python3 废弃,统一使用 range,Python3 中 range 的机制也进行修改并提高了大数据集生成效率

  7. Python3 中这些方法再不再返回 list 对象:dictionary 关联的 keys()、values()、items(),zip(),map(),filter(),但是可以通过 list 强行转换:

    mydict = dict()
    mydict = {"a": 1, "b": 2, "c": 3}
    mydict.keys()  # <built-in method keys of dict object at 0x000000000040B4C8>
    list(mydict.keys())  # ['a', 'c', 'b']
  8. 迭代器 iterator 的 next()函数被 Python3 废弃,统一使用 next(iterator)

  9. raw_input 函数被 Python3 废弃,统一使用 input 函数

  10. 字典变量的 has_key 函数被 Python 废弃,统一使用 in 关键词

  11. file 函数被 Python3 废弃,统一使用 open 来处理文件,可以通过 io.IOBase 检查文件类型

  12. apply 函数被 Python3 废弃

  13. 异常 StandardError 被 Python3 废弃,统一使用 Exception

3)修改类差异

  1. 浮点数除法操作符“/”和“//”的区别
    “ / ”:
    Python2:若为两个整形数进行运算,结果为整形,但若两个数中有一个为浮点数,则结果为
    浮点数;
    Python3:为真除法,运算结果不再根据参加运算的数的类型。
    “//”:
    Python2:返回小于除法运算结果的最大整数;从类型上讲,与"/"运算符返回类型逻辑一致。
    Python3:和 Python2 运算结果一样。
  2. 异常抛出和捕捉机制区别

python2

  raise IOError, "file error"  # 抛出异常except NameError, err:  # 捕捉异常

python3

  raise IOError("file error")  #抛出异常except NameError as err: #捕捉异常
  1. for 循环中变量值区别

    Python2,for 循环会修改外部相同名称变量的值

    i = 1
    print('comprehension: ', [i for i in range(5)])
    print('after:i = ', i)  # i = 4

    Python3,for 循环不会修改外部相同名称变量的值

    i = 1
    print("comprehension: ", [i for i in range(5)])
    print('after: i = ', i)  # i = 1
  2. round 函数返回值区别

    Python2,round 函数返回 float 类型值

    isinstance(round(15.5),int)  #True

    Python3,round 函数返回 int 类型值

    isinstance(round(15.5),float) #True
  3. 比较操作符区别

    Python2 中任意两个对象都可以比较

    11 < 'test'  # True

    Python3 中只有同一数据类型的对象可以比较

    11 < 'test' # TypeError: unorderable types: int() < str()

4)第三方工具包差异

我们在pip官方下载源pypi搜索Python2.7和Python3.5的第三方工具包数可以发现,Python2.7
版本对应的第三方工具类目数量是 28523,Python3.5 版本的数量是 12457,这两个版本在第三方工具
包支持数量差距相当大。
我们从数据分析的应用角度列举了常见实用的第三方工具包(如下表),并分析这些工具包在
Python2.7 和 Python3.5 的支持情况:

分类工具名用途
数据收集scrapy网页采集,爬虫
数据收集scrapy-redis分布式爬虫
数据收集seleniumweb 测试,仿真浏览器
数据处理beautifulsoup网页解释库,提供 lxml 的支持
数据处理lxmlxml 解释库
数据处理xlrdexcel 文件读取
数据处理xlwtexcel 文件写入
数据处理xlutilsexcel 文件简单格式修改
数据处理pywin32excel 文件的读取写入及复杂格式定制
数据处理Python-docxWord 文件的读取写入
数据分析numpy基于矩阵的数学计算库
数据分析pandas基于表格的统计分析库
数据分析scipy科学计算库,支持高阶抽象和复杂模型
数据分析statsmodels统计建模和计量经济学工具包
数据分析scikit-learn机器学习工具库
数据分析gensim自然语言处理工具库
数据分析jieba中文分词工具库
数据存储MySQL-pythonmysql 的读写接口库
数据存储mysqlclientmysql 的读写接口库
数据存储SQLAlchemy数据库的 ORM 封装
数据存储pymsqlsql server 读写接口库
数据存储redisredis 的读写接口
数据存储PyMongomongodb 的读写接口
数据呈现matplotlib流行的数据可视化库
数据呈现seaborn美观的数据可是湖库,基于 matplotlib
工具辅助chardet字符检查工具
工具辅助ConfigParser配置文件读写支持
工具辅助requestsHTTP 库,用于网络访问

5)工具安装问题

windows 环境
Python2 无法安装 mysqlclient。Python3 无法安装 MySQL-python、 flup、functools32、Gooey、Pywin32 、webencodings。
matplotlib 在 python3 环境中安装报错:The following required packages can not be built:freetype, png。需要手动下载安装源码包安装解决。
scipy 在 Python3 环境中安装报错,numpy.distutils.system_info.NotFoundError,需要自己手工下载对应的安装包,依赖 numpy,pandas 必须严格根据 python 版本、操作系统、64 位与否。运行matplotlib 后发现基础包 numpy+mkl 安装失败,需要自己下载,国内暂无下载源

centos 环境下
Python2 无法安装mysql-python和 mysqlclient包,报错:EnvironmentError: mysql_config not found,解决方案是安装 mysql-devel 包解决。使用 matplotlib 报错:no module named _tkinter,安装 Tkinter、tk-devel、tc-devel 解决。
pywin32 也无法在 centos 环境下安装

转载于:https://www.cnblogs.com/pankypan/p/11072229.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript-内存空间

深入了解js这门语言后&#xff0c;才发现它有着诸多众所周知的难点&#xff08;例如&#xff1a;闭包、原型链、内存空间等&#xff09;。有的是因为js的设计缺陷导致的&#xff0c;而有的则是js的优点。不管如何&#xff0c;总需要去学会它们&#xff0c;在学习过程中我觉得只…

java类的结构1: 属性 —(11)

类的设计中&#xff0c;两个重要结构之一&#xff1a;属性 对比&#xff1a;属性 vs 局部变量 1.相同点&#xff1a; 1.1 定义变量的格式&#xff1a;数据类型 变量名 变量值1.2 先声明&#xff0c;后使用1.3 变量都其对应的作用域 2.不同点&#xff1a; 2.1 在类中声明的…

GXU - 7D - 区间求和 - 前缀和

https://oj.gxu.edu.cn/contest/7/problem/D 描述 有一个所有元素皆为0的数组A&#xff0c;有两种操作&#xff1a; 1 l r x表示将A区间[l,r]内所有数加上x&#xff1b; 2 l r表示将A区间[l,r]内从左往右数第i个数加上i&#xff1b; 给出m个操作&#xff0c;请输出操作结束后A中…

javascript-排序算法

插入排序 算法描述&#xff1a; 1. 从第一个元素开始&#xff0c;该元素可以认为已经被排序 2. 取出下一个元素&#xff0c;在已经排序的元素序列中从后向前扫描 3. 如果该元素&#xff08;已排序&#xff09;大于新元素&#xff0c;将该元素移到下一位置 4. 重复步骤 3&am…

DPDK并行计算

参考文献&#xff1a; 《深入浅出DPDK》 https://www.cnblogs.com/LubinLew/p/cpu_affinity.html ...................................................................... 前言&#xff1a; 处理器提高性能主要是通过两个途径&#xff0c;一个是提高IPC&#xff08;CPU每一时…

Highcharts图表-ajax-获取json数据生成图表

重点说明此代码是针对一个报表显示多个项对比显示。 直接贴代码&#xff1a;web端 <script type"text/JavaScript" src"js/jQuery/jquery-1.7.2.js"></script> <script type"text/javascript" src"j…

关于RGBDSLAMV2学习、安装、调试过程

Step&#xff11;&#xff1a;https://github.com/felixendres/rgbdslam_v2/wiki/Instructions-for-Compiling-Rgbdslam-(V2)-on-a-Fresh-Ubuntu-16.04-Install-(Ros-Kinetic)-in-Virtualbox 照着这个instructions安装好 rgbdslamv2&#xff0c;并且在安装的过程中&#xff0c;…

Java—List的用法与实例详解

List特点和常用方法 List是有序、可重复的容器。 有序指的是&#xff1a;List中每个元素都有索引标记。可以根据元素的索引标记&#xff08;在List中的位置&#xff09;访问元素&#xff0c;从而精确控制这些元素。 可重复指的是&#xff1a;List允许加入重复的元素。更确切地讲…

Java—遍历集合的N种方式总结Collections工具类

遍历集合的N种方式总结 【示例1】遍历List方法1&#xff0c;使用普通for循环 for(int i0;i<list.size();i){ //list为集合的对象名 String temp (String)list.get(i); System.out.println(temp); } 【示例2】遍历List方法2&#xff0c;使用增强for循环(使用泛型定义…

java类的结构2: 方法—(12)

面向对象的特征一&#xff1a;封装与隐藏 1.为什么要引入封装性&#xff1f; 我们程序设计追求“高内聚&#xff0c;低耦合”。 高内聚 &#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b; 低耦合 &#xff1a;仅对外暴露少量的方法用于使用。…

Docker 环境下部署 redash

环境&#xff1a; centos7 官网&#xff1a;https://redash.io/help/open-source/dev-guide/docker 一、安装步骤 1、虚拟机安装 安装vmware&#xff0c;并安装centos7 2、安装docker docker安装手册 3、安装nodejs centos下安装Nodejs 4、redash安装 1)、clone git repostory …

List接口常用实现类的特点和底层实现

List接口常用的实现类有3个&#xff1a;ArrayList、LinkedList、Vector。 那么它们的特点和底层实现有哪些呢&#xff1f; ArrayList特点和底层实现 ArrayList底层是用数组实现的存储。 特点&#xff1a;查询效率高&#xff0c;增删效率低&#xff0c;线程不安全。我们一般使用…

java面向对象的特征 —(13)

面向对象的特征一&#xff1a;封装与隐藏 1.为什么要引入封装性&#xff1f; 我们程序设计追求“高内聚&#xff0c;低耦合”。 高内聚 &#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b; 低耦合 &#xff1a;仅对外暴露少量的方法用于使用。…

null指针

做了一个关于花卉花木的管理操作&#xff0c;后期因为花卉的类型需要显示在花卉详情页面&#xff0c;所以需要两张表连接。在不写sql语句的前提下&#xff0c;用了外键连接。因为在先前的操作过程中&#xff0c;没有将外键所在字段设置为必填项&#xff0c;导致有一个外键字段为…

jquery Ajax请求本地json

1-1-1 json文件内容(item.json) [{"name":"张国立","sex":"男","email":"zhangguoli123.com","url":"./img/1.jpg"},{"name":"张铁林","sex":"男"…

论文《learning to link with wikipedia》

learning to link with wikipedia 一、本文目标&#xff1a; 如何自动识别非结构化文本中提到的主题&#xff0c;并将其链接到适当的Wikipedia文章中进行解释。 二、主要借鉴论文&#xff1a; Mihalcea and Csomai----Wikify!: linking documents to encyclopedic knowledge 第…

java类的结构:构造器 —(13)

1.构造器&#xff08;或构造方法&#xff09;&#xff1a;Constructor 构造器的作用&#xff1a; 1.创建对象2.初始化对象的信息 2.使用说明&#xff1a; 1.如果没显式的定义类的构造器的话&#xff0c;则系统默认提供一个空参的构造器2.定义构造器的格式&#xff1a;权限修…

java面向对象的特征二:继承性 —(14)

1.为什么要有类的继承性&#xff1f;(继承性的好处&#xff09; ① 减少了代码的冗余&#xff0c;提高了代码的复用性② 便于功能的扩展③ 为之后多态性的使用&#xff0c;提供了前提 图示&#xff1a; 2.继承性的格式&#xff1a; class A extends B{} A:子类、派生类、s…

vuejs怎么在服务器上发布部署

首先VUE 是一个javascript的前端框架&#xff0c;注定了它是运行在浏览器里的&#xff0c;对服务器本地没有任何要求&#xff0c;只要一个静态文件服务器能通过http访问到其资源文件就足矣&#xff01;无论你是用apache ,ngnix 就算你要用node 自己实现一个静态文件服务器&…

C#入门详解(14)

接口&#xff0c;依赖反转&#xff0c;单元测试 接口是协约是规定&#xff0c;所以必须是公开的&#xff0c;只能是public; static void Main(string[] args){int[] num1 new int[] { 1, 2, 3, 4, 5 };Console.WriteLine(Sum(num1).ToString());Console.WriteLine(""…