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 相关文章推荐
vscode 远程调试python的方法
Dec 01 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
点球小游戏python脚本
May 22 Python
Django rest framework实现分页的示例
May 24 Python
django_orm查询性能优化方法
Aug 20 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
python中sympy库求常微分方程的用法
Apr 28 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python元组拆包实现方法
Feb 28 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获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
详解vue-router基本使用
2017/04/18 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
js中url对象化管理分析
2017/12/29 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
python直接访问私有属性的简单方法
2016/07/25 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Python读写文件基础知识点
2019/06/10 Python
Python字符串的一些操作方法总结
2019/06/10 Python
python实现磁盘日志清理的示例
2020/11/05 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
英语专业毕业生自我鉴定
2013/11/09 职场文书
计算机应用与科学个人的自我评价
2013/11/15 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
客户接待方案
2014/02/26 职场文书
带病坚持工作事迹
2014/05/03 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
应聘教师自荐书
2014/06/16 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
军事理论课感想
2015/08/11 职场文书
七年级作文之环保作文
2019/10/17 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
SQL CASE 表达式的具体使用
2022/03/21 SQL Server