python 3.x 与2.x的区别
前言
保持学习的态度,学一门动态语言其实是很早以前的就准备要做的事情,当时还在纠结python与ruby。现在不单单是要学python,还在考虑用它做点什么,这些等后续再说吧,因为看的是python2.x的书籍。用的是python 3.7.所以先把两者的区别记录一下,仅限于基础。
python3.x 与2.x的区别
1.print
print语句没有了,取而代之的是print()函数。
py 2.x:
print "wyl" #语句 print("wyl")
py 3.x:
>> print("wyl") wyl >>> print 'wyl' SyntaxError: Missing parentheses in call to 'print'. Did you mean print('wyl')?
2.Unicode
Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。
现在, 在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。
由于 Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:
py 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'
py 3.x
>>> str='王延领那小子真帅' >>> str '王延领那小子真帅' >>>
3.除法运算
Python中的除法有两个运算符,/和//
首先来说/除法:
在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C#啊差不多,取整,把小数部分完全忽略掉。
在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。
py 2.x
>>> 1/2 0 >>>
py 3.x
>>> 1/2
0.5
>>>
第二种//除法:
这种除法叫做floor除法,py2.x与py3.x相同
py2.x py3.x
>>> 1//2 0 >>>
4.异常
在 py3.x 中我们现在使用 as 作为关键词,而非‘,’
所以异常都从 BaseException继承,并删除了StardardError
去除了异常类的序列行为和.message属性
用 raise Exception(args)代替 raise Exception, args语法
捕获异常的语法改变,引入了as关键字来标识异常实例
py3.0:
>>> try: 1/0 except Exception , err: print err SyntaxError: invalid syntax >>> #正确的写法 >>> try: 1/0 except Exception as err: print(err) division by zero >>>
5.xrange
xrange() 改名为range(),要想使用range()获得一个list,必须显式调用:
py 2.x
>>> range(1,10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
py3.x
>>> range(10) range(0, 10) >>>
py3.x 如果想使用range(),可以结合list
>>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>
6.八进制
python 八进制不能0开头而是以0o开头
py 3.x
>>> 0101 SyntaxError: invalid token >>> 0o101 65 >>>
7.不等运算符
不等运算py3.x只有“!=”,“<>”已被移除
py3.x
>>> 1!=3 True >>> 1<>3 SyntaxError: invalid syntax >>>
8.去掉了repr表达式``
py3.x
>>> s=`wyl` SyntaxError: invalid syntax >>> s='wyl' >>> repr(s) "'wyl'"
9.多个模块被改名(根据PEP8)
旧的名字 | 新的名字 |
---|---|
_winreg | winreg |
ConfigParser | configparser |
copy_reg | copyreg |
Queue | queue |
SocketServer | socketserver |
repr | reprlib |
StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。
Python 2.6已经支援新的io模组。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。
10.数据类型
py 3.x
1>去掉了long
2>新增了bytes类型,对应于2.X版本的八位串
3>dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。
11.面向对象
1>引入抽象基类(Abstraact Base Classes,ABCs)
2>容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.x多了很多
>>> import collections >>> print('\n'.join(dir(collections))) AsyncGenerator AsyncIterable AsyncIterator Awaitable ByteString Callable ChainMap Collection Container Coroutine Counter Generator Hashable ItemsView Iterable Iterator KeysView Mapping MappingView MutableMapping MutableSequence MutableSet OrderedDict Reversible Sequence Set Sized UserDict UserList UserString ValuesView _Link _OrderedDictItemsView _OrderedDictKeysView _OrderedDictValuesView __all__ __builtins__ __cached__ __doc__ __file__ __loader__ __name__ __package__ __path__ __spec__ _chain _collections_abc _count_elements _eq _heapq _iskeyword _itemgetter _nt_itemgetters _proxy _recursive_repr _repeat _starmap _sys abc defaultdict deque namedtuple >>>
3>迭代器的next()方法改名为__next__(),并增加内置函数next(),用以调用迭代器的__next__()方法
4>增加了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。
12.模块
1>移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。
2>移除了imageop模块
3>移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块
5>移除了new模块
6>os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
7>tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()
python 3.x 与2.x的区别的更多相关文章
- python _、__和__xx__的区别
python _.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家.英文原文地址:Difference between _, __ and __xx__ in Pytho ...
- python中import和from...import...的区别
python中import和from...import...的区别: 只用import时,如import xx,引入的xx是模块名,而不是模块内具体的类.函数.变量等成员,使用该模块的成员时需写成xx ...
- 转发 python中file和open有什么区别
python中file和open有什么区别?2008-04-15 11:30地痞小流氓 | 分类:python | 浏览3426次python中file和open有什么区别?都是打开文件,说的越详细越 ...
- Python新式类与经典类的区别
1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性:反之,即不由任意内置类型派生出的类 ...
- Python import与from import使用及区别介绍
Python程序可以调用一组基本的函数(即内建函数),比如print().input()和len()等函数.接下来通过本文给大家介绍Python import与from import使用及区别介绍,感 ...
- 【转】python类中super()和__init__()的区别
[转]python类中super()和__init__()的区别 单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(se ...
- Python新式类和经典类的区别
@Python新式类和经典类的区别 class ClassicClass(): pass class NewStyleClass(object): pass x1 = ClassicClass() x ...
- Python3.x:python: extend (扩展) 与 append (追加) 的区别
Python3.x:python: extend (扩展) 与 append (追加) 的区别 1,区别: append() 方法向列表的尾部添加一个新的元素.只接受一个参数: extend()方法只 ...
- Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用
Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...
- python 基础-文件读写'r' 和 'rb'区别
原文链接: python基础-文件读写'r' 和 'rb'区别 一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r ...
随机推荐
- SQL或HQL预编译语句,可以防止SQL注入,可是不能处理%和_特殊字符
近期项目在做整改,将全部DAO层的直接拼接SQL字符串的代码,转换成使用预编译语句的方式.个人通过写dao层的单元測试,有下面几点收获. dao层代码例如以下 //使用了预编译sql public L ...
- 自己手写WEB程序框架并执行
1.新建目录,起名MyWeb 2.目录下,新建两个目录 WEB-INF, META-INF,,还能够新建一些jsp,html文件 ,如 index.html 3在WEB-INF中必须存在一个文件WEB ...
- 【Android Studio快捷键】之导入对应包声明(import packages)
可能import 单个声明的快捷键大家都非常easy找到.Alt+Enter.可是假设我要一次性import文件里全部的声明.这个快捷键是什么呢,找啊找的,就是没找到,曾经在Eclipse是Ctrl+ ...
- [UWP]本地化入门
1. 前言 上一篇文章介绍了各种WPF本地化的入门知识,这篇文章介绍UWP本地化的入门知识. 2. 使用resw资源文件实现本地化 在以前的XAML平台,resx资源文件是一种很方便的本地化方案,但在 ...
- idea将maven项目打包成war包的方式,以及使用war包
打包WAR过程 首先对项目进行编译.然后执行以下步骤: 单击下图红色方框处 在IDEA右侧出现maven project选项 单击maven project选项,出现Spring MVC Basi ...
- Unable to resolve persistence unit root URL
异常信息 时间:2017-03-07 11:46:05,516 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to hav ...
- ADB usb 或 WiFi 连接手机 ADB工具下载
ADB usb 或 WiFi 连接手机 ADB工具下载 小米 MIUI8.5 手机开启USB调试 1.设置-->我的手机-->全部参数-->MIUI版本--->连续点N次 2. ...
- lua元方法
lua中有元表的概念,元表类似于基类的功能, 在元表中有两个方法可以很好的认识元表: __index和__newindex __index用于查询 对表中的字段进行访问时,如果该表有元表,并且 表中没 ...
- ubuntu 编译运行 opencv C++ 项目
ubuntu 编译运行 opencv C++ 项目 环境 ubuntu 16.04 opencv3.4.0 一. 编译方法 1)命令行 g++ imageResize.cpp -o resize `p ...
- git 的回退
今天下午写了一下午的代码给合并没了 然后晚上觉得还是要好好学习一下git的使用 推荐几个git的教程 https://www.liaoxuefeng.com/wiki/0013739516305929 ...