python2.7转python3.7散记

1.print函数

print语句没有了,取而代之是print()函数

2.编码

python2默认编码是asscii

python3默认编码是UTF-8

这样不再需要在文件顶部写# coding=utf-8 

3.字符串

python2中字符串有两个类型

  • unicode 表示文本字符串
  • str 表示字节序列

python3做了严格区分

  • str 表示字符串
  • byte 表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,阻止了编码错误的问题。

把未知编码的byte类型,转义为str类型

def get_str_data_from_bytes(data):
    '''将未知编码的二级制数据,转义为str类型,主要用于中文文件上传后的数据读取,不支持混合编码如简体中混入繁体字'''
    typestr = chardet.detect(data)
    return data.decode(typestr.get('encoding'))

3.range

python2的range和xrange,在python3中合并成了range

4.字典的dict.keys(),dict.values(),dict.items()不再返回列表, dict.has_key()被移除

而是一个类似迭代器的view对象返回。

a = {'a':'aaa','b':'bbb'}
for x in a.items():
    print(x)

#输出
('a', 'aaa')
('b', 'bbb')

在 Python3 里面dict.has_key() 被移除了。改成用 in 或者 not in:

5.除法1/2 结果是0.5,不再是0

6.long重命名为int

python3彻底废弃了long+int双整数实现的方法,统一为int,支持高精度整数运算。

7. except Exception, e变成except (Exception) as e

8. for循环变量不会再导致命名空间泄露

i = 1
[i for i in range(3)]
print(i)
#输出为1,而在python2中输出为2

但是如下情况并没有变化
>>> j = 0
>>> for j in range(3):
...  print(j)
... 
0
1
2
>>> j
2

9.继承

class A:
     def __init__(self):
         print("A")
​class B(A):
     pass
​class C(A):
    def __init__(self):
        print("C")
​class D(B,C):
    pass
​
d1 = D()

Python2 结果为 A,Python3 结果为 C。
python2 的继承顺序是 D -> B -> A -> C 深度优先 python3 的继承顺序是 D -> B -> C -> A 广度优先

10.模块改名

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib放进了http里面

urllib, urllib2, urlparse, robotparse放进了urllib里面

11.如果在python2中使用python3的语法则可以使用__futrue__

如想要1/2为0.5可以如下

>>> from __future__ import division
>>> 1/2
0.5

12. 迭代器的 .next()属性报错

>>> a = (i for i in 'abc') #圆括号生成迭代器
>>> next(a)
'a'
>>> a.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'generator' object has no attribute 'next'

13.string包变动

string中不再有string.letters而要换成string.ascii_letters,输出

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值