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 ...
随机推荐
- ABP入门系列(12)——如何升级Abp并调试源码
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 升级Abp 本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2(截至 ...
- 【Web性能进阶】1.无线网络基础
一.无所不在的连接 针对不通的使用场景,无线网络技术有很多种. 鉴于无线网络技术如此多样,笼统地概括所有无线网络的性能优化手段是不可能的.好在大多数无线技术的原理都是相通的,衡量性能的指标和约束条件也 ...
- Android项目实战(三十九):Android集成Unity3D项目(图文详解)
需求: Unity3D 一般用于做游戏 而且是跨平台的.原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作. ...
- seleniumPO模式
一.框架目录结构 二.代码 2.1page层代码 package com.mianshui.page; import org.openqa.selenium.WebElement; import or ...
- VMware安装Linux,系统分区。
系统分区: 主分区<=4 扩展分区<=1 主分区+扩展分区<=4 扩展分区不能直接使用,必须再分成若干逻辑分区才能读写数据. 逻辑分区编号从5开始,1-4给主分区和扩展分区使用的,不 ...
- Linux简介,虚拟机安装,网络设置,桌面和vim安装
Linux简介: linux代表系统内核.Linux系统指基于Linux内核的操作系统,由内核和程序结合组成.比较流行的发行版本由RedHat Linux.Fedora.Centos.Debian.U ...
- java.lang.StringBuilder和java.lang.StringBuffer (JDK1.8)
这两个类都是继承自AbstractStringBuilder,AbstractStringBuilder有两个成员属性 char[] value; int count; 前者用于存储字符串,后者用于统 ...
- Bash shell命令记录和CentOS的一些技巧
①CentOS的实用技巧: 一.按下ctrl+alt+F2可由图形界面切换至命令行(shell窗口),按下ctrl+alt+F1可由命令行切换至图形界面(前提是安装CentOS时软件选择项选择安装了图 ...
- Docker(八):Docker端口映射
1.随机映射 docker run -P -d --name mynginx1 nginx [root@node1 ~]# docker ps -l CONTAINER ID IMAGE COMMAN ...
- Prism for WPF再探(基于Prism事件的模块间通信)
上篇博文链接 Prism for WPF初探(构建简单的模块化开发框架) 一.简单介绍: 在上一篇博文中初步搭建了Prism框架的各个模块,但那只是搭建了一个空壳,里面的内容基本是空的,在这一篇我将实 ...