编码:

  • 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示例


摘自:


End

Python - 2和3的区别的更多相关文章

  1. ava、Python和PHP三者的区别

    Java.Python和PHP三者的区别 2017年07月15日 22:09:21 书生_AABB 阅读数:18994   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  2. python中// 和/有什么区别

    python中// 和/有什么区别 通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如: 6 / 3 = 2 ; 6,3都是整数,那么结果也就是 ...

  3. Python 2 和 3 的区别记录

    Python 2 和 3 的区别记录 print 2:关键字,可以 print a,也可以 print(a) 3:内置函数,必须带(),print(a) reload() 2:内置函数,可以直接使用 ...

  4. Python中__repr__和__str__区别

    Python中__repr__和__str__区别 看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): ...

  5. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  6. python,pycharm,anaconda之间的区别与联系 - python基础入门(2)

    Python环境配置-Pycharm下载/Anaconda安装 中我们已经完成了 Pycharm 和Anaconda 的安装.可能对于刚接触的小伙伴还是比较懵逼的,一会python一会Anaconda ...

  7. python 3 与python 2连接mongoDB的区别

    本文出自:https://www.cnblogs.com/2186009311CFF/p/11852010.html 好久前机缘巧合见识过量化投资,然而堵在了用python连接MongoDB数据库上, ...

  8. python 2 和3 的区别

    python 2 和3 的区别 Python2 Python3 打印 print " " print() 输入 raw_input() input() 范围 range/xrang ...

  9. Python中is和==的区别

    Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么. 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识) ...

  10. Python:urllib和urllib2的区别(转)

    原文链接:http://www.cnblogs.com/yuxc/ 作为一个Python菜鸟,之前一直懵懂于urllib和urllib2,以为2是1的升级版.今天看到老外写的一篇<Python: ...

随机推荐

  1. docker相关内容

    原文地址:https://www.cnblogs.com/zhuochong/category/1310443.html

  2. dockerfile使用

    一.构筑镜像命令 docker build -t test/nginx:v1.0 - prese/nginx:v1.0 -f /git/dockerfile . -t:指定存储库:镜像名和标签保存新镜 ...

  3. jquery预加载显示百分比

    jquery预加载显示百分比 <pre> <img class="bj loadimg" loadimg="/weiqingshu/images/1/b ...

  4. 一个".java"源文件中是否可以包括多个类(不包括内部类)

    开通好几个月博客了,但是一直没有时间写,这一段时间准备开始复习了,以后准备好好写博客了,会从基础的内容开始. 一个".java"源文件中可以定义多个类,但最多只能定义一个publi ...

  5. MD5用户密码加密工具类 MD5Util

    一般记录用户密码,我们都是通过MD5加密配置的形式.这里记录一下,MD5加密的工具类. package com.mms.utils; import java.security.MessageDiges ...

  6. 修改Jupyter Notebook的默认打开路径

    一: (也可以直接将删除的部分修改成所要存储的文件路径,之后三个步骤就可以省去了) 二: 打开Windows的cmd,在cmd中输入jupyter notebook --generate-config ...

  7. Hive drop table,create table没有反应处理方法

    Hive drop table时没有反应,于是强制中断. 解决之法,对其进行补充. mysql> show variables like 'char%';第一步:进入mysql,输入:show ...

  8. C语言函数返回指针方法

    1.将函数内部定义的变量用static修饰 由于static修饰的变量,分配在静态内存区(类似于全局变量区),函数返回时,并不会释放内存,因此可以将要返回的变量加static修饰. int *test ...

  9. (1)SQL Server内存浅探

    1.前言 对于数据库引擎来说,内存是一个性能提升的重要解决手段.把数据缓存起来,可以避免在查询或更新数据时花费多余的时间,而这时间通常是从磁盘获取数据时用来等待磁盘寻址的.把执行计划缓存起来,可以避免 ...

  10. C# vb .net图像合成-合成星形

    在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码 ...