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获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
python多进程操作实例
Nov 21 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
Python实现自动登录百度空间的方法
Jun 10 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
Flask解决跨域的问题示例代码
Feb 12 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
Python笔记之facade模式
Nov 20 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
pycharm 实现复制一行的快捷键
Jan 15 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
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
jQuery Ajax 全解析
2009/02/08 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
python快速排序代码实例
2013/11/21 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python编程使用协程并发的优缺点
2018/09/20 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
经典的班主任推荐信
2013/10/28 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
投资合作协议书
2014/04/17 职场文书
医学求职信
2014/05/28 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
暂住证明怎么写
2015/06/19 职场文书
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL