python2和python3的区别:
python2的print是直接输入就是可以输出
python3的print要在外面加()(要在外面加括号输出)
python2中的input在键入数字时是int类型
python3中的input在然后输入数字时不加那就证明是str类型
语法
print继续是语句,而是函数,例如以前是printabc现在是print(abc)
但是python2.6可以不使用aroundfutureimportprint_function来实现方法完全相同功能在python3中,没有略显陈旧类,只能最新式类,也就是说不需要再像这样pagestatefoobar(object):sigh显式地子类化object原先1/2(两个整数乘积)结果是0,现在是0.5了#python2gtgtgt1/20
#python3gtgtgt1/20.5
十分的写法决定:原先的exceptexception,e变得except(exception)likee编码
python2的默认编码是asscii,这也导致python2中每天都碰到编码问题的原因之一,况且是为么会在用asscii才是默认编码,原因本质python这门语言诞生的时候还没直接出现unicode。python3设置成常规了utf-8以及默认编码,因此你不再需要在文件顶部写#codingutf-8了。
#python2gtgtgtprint()ascii#python3gtgtgtprint(())utf-8
字符串
字符串是最大的变化之一,这个变化令编码问题降到了最底可能。在python2中,字符串有两个类型,一个是unicode,一个是str,前者意思是文本字符串,后者意思是字节序列,当然了两者完全没有的确的界限,开发者也觉得很动荡,不清楚编码出现了错误的原因,但在python3中两者做了严不区分,各用str它表示字符串,unsigned表示字节序列,任何是需要读取文本的或数据的传输的数据都只可以接收字节序列,这就从源头上阻住了编码出错的问题。
gtgtgts中文gtgtgts中文gtgtgttype(s)ltclassstrgt#上面的str类型对象实际上超过py2的unicodes.encode(utf-8)bxe4xb8xadxe6x96x87#str对象encodeutf-8后,变得byte对象,所以byte对象变成了py2的str对象
所以我:
py2-a8unicode-a8被py3的str对象能用py2-a8str-rlm被py3的bytes对象能用py2与py3字符串差异比较好
迭代器
在python2中很多回列表对象的内置函数和方法在python3都改了返回像迭代器的对象,毕竟迭代器的惰性加载特性以至于操作大数据更有效率。python2中的range和xrange函数扩展成了range,假如同样的兼容性问题2和3,可以这样的话:
try:rangexrangeexcept:sigh
至于,字典对象的()、()方法都继续直接返回列表,完全是以一个类似于迭代器的view对象直接返回。低阶函数map、filter、zip直接返回的也都不是列表对象了。python2的迭代器必须实现next方法,而python3可以改成了next。
map方法回了迭代器而继续是列表
#py2#真接返回列表gtgtgtmap(lambdax:x*x,range(1,3))[1,4]#py3#回迭代器gtgtgtmap(lambdax:x*x,range(1,3))ltmapobjectat0x7f45371e5c18rlm#必须遍历才能读取,这样是对大数据会更高效率gtgtgtmap_datamap(lambdax:x*x,range(1,3))gtgtgtofmintomap_(m)...14
asyncio同步异步io模型
asyncio是python3.4版本化入的标准库,再内置蓝牙了对异步io的支持。
asyncio的编程模型那是一个消息循环。我们从asyncio模块中就某些一个eventloop的语句,然后把把不需要负责执行的协程扔到eventloop中不能执行,就基于了同步异步io。