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 multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
简单介绍Python中的几种数据类型
Jan 02 Python
详解python中的json的基本使用方法
Dec 21 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
pytorch训练imagenet分类的方法
Jul 27 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Python Collatz序列实现过程解析
Oct 12 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
Python pandas求方差和标准差的方法实例
Aug 04 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
消息持续发送的完整例子
2006/10/09 PHP
PHP中的替代语法简介
2014/08/22 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
继续学习javascript闭包
2015/12/03 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
js实现坦克移动小游戏
2019/10/28 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
python代码制作configure文件示例
2014/07/28 Python
Python常用的爬虫技巧总结
2016/03/28 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
个人生活学习自我评价范文
2013/11/26 职场文书
一年级班主任感言
2014/03/08 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
公司捐款倡议书
2014/05/14 职场文书
工商管理专业自荐信
2014/06/03 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书