Python2与Python3的区别实例总结


Posted in Python onApril 17, 2019

本文实例总结了Python2与Python3的区别。分享给大家供大家参考,具体如下:

Python的3??.0版本相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。新的Python程式建议使用Python 3.0版本的语法。越来越多的库要放弃Python 2了,大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。本片博文就是讲述一下Python2.x与3??.x版本区别。

一、print函数

Python 2中print是语句(statement),Python 3中print则变成了函数。在Python 3中调用print需要加上括号,不加括号会报SyntaxError。Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "123"
print ("123") #注意print后面有个空格
print("123") #print()不能带有任何其它参数
# 然而,Python 2.6实际已经支持新的print()语法:
from __future__ import print_function
print("123", "456", sep=', ')

二、Unicode

Python 2有两种字符串类型:str和unicode,Python 3中的字符串默认就是Unicode,Python 3中的str相当于Python 2中的unicode。在Python 2中,如果代码中包含非英文字符,需要在代码文件的最开始声明编码,如下:

# -*- coding: utf-8 -*-

由于 Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:

>>> 你好 = 'hello'
>>>print(你好)
hello

Python 2.x:

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x:

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

三、除法运算

Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//。

首先来说/除法:在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

而对于//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是一致的。

Python 2.x/Python 3.x相同:

>>> -1 // 2
-1

四、异常处理

在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。捕获异常的语法由 except exc, var 改为 except exc as var。使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。

Python 2.x:

try:
  1/0
except ZeroDivisionError, e:
  print str(e)

Python 3.x(此种方式python 2.x也可用,python 3.x必须带as):

try:
  1/0
except ZeroDivisionError as e:
  print str(e)

五、xrange

在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。这个表现十分像生成器(比如。"惰性求值")。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。

简单来说就是:Python 2中有 range 和 xrange 两个方法。其区别在于,range返回一个list,在被调用的时候即返回整个序列;xrange返回一个iterator,在每次循环中生成序列的下一个数字。Python 3中不再支持 xrange 方法,Python 3中的 range 方法就相当于 Python 2中的 xrange 方法。

六、map、filter 和 reduce

这三个函数号称是函数式编程的代表。在 Python3.x 和 Python2.x 中也有了很大的差异。首先我们先简单的在 Python2.x 的交互下输入 map 和 filter,看到它们两者的类型是 built-in function(内置函数):

>>> map
<built-in function map>
>>> filter
<built-in function filter>
>>>

但是在Python 3.x中它们却不是这个样子了:

>>> map
<class 'map'>
>>> map(print,[1,2,3])
<map object at 0x10d8bd400>
>>> filter
<class 'filter'>
>>> filter(lambda x:x % 2 == 0, range(10))
<filter object at 0x10d8bd3c8>
>>>

首先它们从函数变成了类,其次,它们的返回结果也从当初的列表成了一个可迭代的对象, 我们尝试用 next 函数来进行手工迭代,对于比较高端的 reduce 函数,它在 Python 3.x 中已经不属于 built-in 了,被挪到 functools 模块当中。

七、raw_input()和input()

在python2.x中raw_input()和input( ),两个函数都存在,其中区别为:

raw_input()---将所有输入作为字符串看待,返回字符串类型

input()---只能接收"数字"的输入,在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型(int, float )

在python3.x中raw_input()input( )进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。

八、数据类型

1. Python3.x去除了long类型,现在只有一种整型——int,但它的行为就像Python2.x版本的long

2. 新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:

>>> b = b'china'
>>> type(b)
<type 'bytes'>
str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'

3. dict的.keys().items.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。

这是最近整理的一些资料,并不是很全面,还有其他不同之处后续努力更新。

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python自动化测试之setUp与tearDown实例
Sep 28 Python
python实现合并两个数组的方法
May 16 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
python读取Excel实例详解
Aug 17 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
python导入pandas具体步骤方法
Jun 23 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
使用pip安装python库的多种方式
Jul 31 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
Python建造者模式案例运行原理解析
Jun 29 Python
详解Python用户登录接口的方法
Apr 17 #Python
详解python中递归函数
Apr 16 #Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 #Python
详解Python连接MySQL数据库的多种方式
Apr 16 #Python
详解Python学习之安装pandas
Apr 16 #Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 #Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 #Python
You might like
php xml 入门学习资料
2011/01/01 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
php输入流php://input使用浅析
2014/09/02 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python 写的一个爬虫程序源码
2016/02/28 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
django教程如何自学
2020/07/31 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
Pycharm安装python库的方法
2020/11/24 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
搬家公司的创业计划书
2014/01/01 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书