Python - 2和3的区别
编码:
- Python2的默认编码是ASCII码,这是导致Python2中经常遇到编码问题的主要原因之一,至于原因,在于Python这门语言出现的时候,还没有Unicode!
- Python3默认编码是Unicode,因此,不必再文件顶部写# codeing=utf-8了。
# Python2:
import sys
>>>sys.getdefaultencoding()
'ascii' # Python3:
import sys
>>>sys.getdefaultencoding()
'utf-8'
查看默认编码
字符串:
- Python2中,字符串有两种类型,Unicode和str,前者表示文本字符串,后者表示字节序列,但在Python2中并没有严格的界限,所以容易出错。
- Python3中,str表示字符串,byte表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,这就从源头上阻止编码错误的问题。
True和False:
- Python2中true和false是两个全局变量,在数值上对应1和0
- Python3则把true和false指定为关键字,永远指向两个固定的对象,不能被重新赋值
# Python2:
>>> True = False
>>> True
False
>>> True = 1
>>> True
1
>>> False = 'x'
>>> False
'x' # Python3:
>>> True = False
File "<stdin>", line 1
SyntaxError: can't assign to keyword
>>> True = 1
File "<stdin>", line 1
SyntaxError: can't assign to keyword >>> import keyword
>>> keyword.iskeyword('True')
True
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
True和False的区别
nonlocal:
- Python2中无法给嵌套函数中的变量声明为非局部变量,只能使用global关键字声明某个变量为全局变量
- Python3中新增关键字nonlocal,可以解决这一问题
a = 3
def func1():
a = 1
def foo():
a = 2
foo()
print(a) #
func1()
def func2(): a = 1
def foo():
nonlocal a
a = 2
foo()
print(a) #
func2()
nonlocal
语法:
- 去除了 <> ,全部使用 != # python2两个都可以,python3则只能用 !=
- 去除 '' ,新增repr()
- 新增关键字:as,with,True,False,None
- 整形除法返回浮点数,如想要得到整形结果,使用 //
- 去除print语句,变为print()函数实现相同功能,同样的还有exec语句,改为exec()函数
- 改变了顺序操作符的行为,例如,x > y,当x和y类型不同时则抛出TypeError,而不是返回bool值
- 输入函数由raw_input改为input
- 去除元组参数解包,不能再def(a,(b,c)):pass这样定义函数
- 新的super(),可以不用传递参数
#Python2
>>> 6 / 2
3
>>> 6 //2
3
>>> 1 <> 2
True
>>> 1 != 2
True
>>> 'a' < 1
False
>>> 'a' < 1
False
>>> 'a' > 1
True #Python3
>>> 6 / 2
3.0
>>> 6 //2
3
>>> 1 <> 2
File "<stdin>", line 1
1 <> 2
^
SyntaxError: invalid syntax
>>> 1 != 2
True
>>> 'a' < 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'
!=示例
异常:
- 异常都继承BaseException
- 用 raise Exception(args)代替 raise Exception, args语法
- 捕获异常的语法改变,引入了as关键字来标识异常实例
模块:
- 移除cPickle模块,可以使用pickle模块代替
- 移除imageop模块
- 移除bsddb模块
- 移除new模块
- os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
- tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()
其它:
- xrange()改为range(),要想使用range()获得一个list,必须显示调用:list(range(100))
- bytes对象不能hash,也不支持 b.lower()、b.strip()和b.split()方法,但对于后两者可以使用 b.strip(b’
\n\t\r \f’)和b.split(b’ ‘)来达到相同目的 - zip()、map()和filter()都返回迭代器。而apply()、 callable()、coerce()、 execfile()、reduce()和reload
()函数都被去除了 - Python3中file类被废弃
#Python2
>>> file
<type 'file'> # Python3
>>> file
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'file' is not defined
file示例
摘自:
- https://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html
- http://blog.51cto.com/9478652/2062653
- http://blog.51cto.com/9478652/2057896 # 字符编码
End
Python - 2和3的区别的更多相关文章
- ava、Python和PHP三者的区别
Java.Python和PHP三者的区别 2017年07月15日 22:09:21 书生_AABB 阅读数:18994 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- python中// 和/有什么区别
python中// 和/有什么区别 通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如: 6 / 3 = 2 ; 6,3都是整数,那么结果也就是 ...
- Python 2 和 3 的区别记录
Python 2 和 3 的区别记录 print 2:关键字,可以 print a,也可以 print(a) 3:内置函数,必须带(),print(a) reload() 2:内置函数,可以直接使用 ...
- Python中__repr__和__str__区别
Python中__repr__和__str__区别 看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): ...
- Java Web开发和Python Web开发之间的区别
今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...
- python,pycharm,anaconda之间的区别与联系 - python基础入门(2)
Python环境配置-Pycharm下载/Anaconda安装 中我们已经完成了 Pycharm 和Anaconda 的安装.可能对于刚接触的小伙伴还是比较懵逼的,一会python一会Anaconda ...
- python 3 与python 2连接mongoDB的区别
本文出自:https://www.cnblogs.com/2186009311CFF/p/11852010.html 好久前机缘巧合见识过量化投资,然而堵在了用python连接MongoDB数据库上, ...
- python 2 和3 的区别
python 2 和3 的区别 Python2 Python3 打印 print " " print() 输入 raw_input() input() 范围 range/xrang ...
- Python中is和==的区别
Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么. 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识) ...
- Python:urllib和urllib2的区别(转)
原文链接:http://www.cnblogs.com/yuxc/ 作为一个Python菜鸟,之前一直懵懂于urllib和urllib2,以为2是1的升级版.今天看到老外写的一篇<Python: ...
随机推荐
- java修改文件所有者及其权限
1.设置所有者 管理文件所有者 Files.getOwner()和Files.setOwner()方法 要使用UserPrincipal来管理文件的所有者 (1)更改文件的所有者 import jav ...
- (CSDN迁移)JAVA多线程实现-继承Thread
继承Thread方法: extends Thread 重写覆盖run()方法: @Override public void run() 通过start()方法启动线程. threadDemo01.st ...
- prototype和__proto__的关系是什么?
我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法.(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就 ...
- C++—lambda表达式+优先队列 prority_queue+关键字decltype
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1-&g ...
- Python 入门(2):数据类型
一 Number(数字) 1.1 数字类型的创建 a = 10 b = a b = 5 print(a) 10 print(b) 5 1.2 Number 类型转换 a = 5.2 b = 5 c = ...
- MySQL恩恩怨怨
数据库基础 Windows安装MySQL Mac安装MySQL Linux安装MySQL MySQL存储引擎概述 MySQL表操作 MySQL支持的数据类型 MySQL表的完整性约束 MySQL记录操 ...
- golang使用json格式实现增删查改
需求和思路 在一般的小项目或者一个小软件,例如客户端之类的小程序中,可能会需要数据的持久化.但是使用一般的数据库(Mysql)之类的不合适.使用sqlite3这种嵌入式的是个较好的方法,但是Go语言中 ...
- cocos creator ScrollView组件scrollToOffset()方法的使用
前言 之前想用scrollToOffset()在打开界面时,滑动窗口滑动到一个相对应的位置,但是使用scrollToOffset()这个方法的时候,没起作用.然后就用了其他方法来实现相同的效果.现在有 ...
- robotframework_接口自动化
我们在使用rebotframework的时候,不只是能做UI自动化,接口自动化也是可以的. 那么这里就整理一下rebotframework_接口自动化的应用: 一.编写接口测试 由上图可知,该接口如下 ...
- The driver is automatically registered via the SPI and manual loading of the driver class....
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb ...