您现在的位置是:首页>文章详情

python3和python2的巨大不同

泛逸舟 原文链接

1、print:(Python3中print为一个函数,必须用括号括起来;Python2中print为class)

2、输入(Python3中input得到的为str;Python2的input的到的为int型,Python2的raw_input得到的为str类型)统一一下:Python3中用input,Python2中用row_input,都输入为str

3、整除:(没有太大影响)(Python3中/表示真除,%表示取余,//表示地板除(结果取整);Python2中/表示根据除数被除数小数点位得到结果,//同样表示地板除)统一一下:Python3中/表示真除,%表示取余,//结果取整;Python2中带上小数点/表示真除,%表示取余,//结果取整

4、xrange模块:

在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中xrange() 会抛出命名异常)。

在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。

  这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。

  由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

5、map()函数

功能是:map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。在python2中,map()函数返回值是list类型,在python3.6中返回值改为map object类型,遍历前要转换成list才可以

def f(x,y):
    return {x:y}
a=[1,2]
b=['c','d']
list(map(f,a,b))  #如果不加list,将返回<map object 0x...>
Out[]: [{1: 'c'}, {2: 'd'}

实际使用中可以使用匿名函数,比较麻烦,但是看起来明显

list(map(lambda x,y : f(x,y), a,b))
Out[]: [{1: 'c'}, {2: 'd'}]

6、filter()函数

在python3,6中返回值是<filter at 0xf9d9a10cf8>,而在python2中返回值类型是list

7、异常处理

在python2.x中 ,异常是这样的处理的,异常基类后面加一个逗号“ ,”  然后跟着异常类型

try:
  1/0
except Exception , err:
  print err

在python3.x中,异常是这样处理的,基类通过关键 词"as" 连接异常类型

try:
  1/0
except Exception as err:
  print(err)

8、数据类型

在python3中str是Unicode编码的字节, bytes是其他字节

在python2中str默认是ascii编码的字节, Unicode是另一种类型

bytes: 就是八个二进制的字节, 我们存储和在网络传输中实际上都是字节

Unicode, GBK, ASCII, UTF8都是将字节翻译成有用的信息, Unicode可以存储所有文字, 可以用他来做一个中间编码来转换其他的编码

python3

# 转成字节
a = "爸爸"
byte = a.encode("utf8")
print(byte, type(byte))
 
byte = bytes(a, encoding="utf8")
print(byte, type(byte))
 
# 转成字符串
st = byte.decode("utf8")
print(st, type(st))
 
st = str(byte, encoding="utf8")
print(st, type(st))

python2

# _*_ coding:utf8 _*_
 
# 转成Unicode, 这里用utf8转是因为上面写的
nui = "我是你爸爸".decode("utf8")
print nui, type(nui)
 
# 转成字符串
st = nui.encode("utf8")
print st, type(st)

9、range 和 xrange

python 2中 range返回的是列表,xrange 返回的是生成器

python3中 range 返回的就是生成器,需要 num_list = list(range(5)),才能得到列表


未完,待续。。。。

该问题 <a href="https://www.zhihu.com/question/19698598">知乎链接</a>

评论

评论插件