python2与python3的区别

一,

python2不能显示中文,需要在代码的顶行加上#-*-encoding:utf-8-*-    

python3则不需要。

二 ,

python2中字符串就是字节串,在源码中:

bytes = str

;

三 ,

python3中字符串是需要用Unicode转成字节的;

文件操作中python2里面xreadlines它返回的是一个可迭代对象,可以一次只取一行数据.例如:

fh=open('aa.log','rb')

for line in fh.xreadlines():

  print(line)

四,

python2中的交互用raw_input,必须且只能用它。而python3中的交互用input。

五,

python2中print不需要加(),可加可不加。而python3中的print必须加()。

六 ,

七 ,

py2:xrange.   py3:range

python2在编译安装时,可以通过参数--enable-unicode=ucs2 或--enable-unicode=ucs4分别用于指定使用2个字节,

4个字节表示一个unicode字符;

python3无法进行选择,默认使用utf-8。

查看当前python中表示unicode字符串占用的空间:

import sys

print(sys。maxunicode)

如果值是65535,则表示使用ucs2标准,即:两个字节表示

如果值是1114111,则表示使用ucs4标准,即:四个字节表示

 八 ,

 yield from在python3开始出现:为了方便操作

在python3中才有yield from为了操作起来更简便

def func():
    a = 'AB'
    b = 'CD'
    yield from a
    yield from b
#分别返回ABCD
g = func()
for i in g:
    print(i)
View Code

九 ,

 nonlocal  是在 python3中才有的,python2是没有的。

 十 ,

这里的区别是在面向对象,继承里出现的

 十一 ,

在连接数据库mysql的时候我们的2版本和3版本使用的模块不一样,

在3版本中我们使用的是pymysql,

在2版本中我们使用的是mysqldb,

 十二 ,

关于metaclass的用法,在python2中和python3中的区别

class Foo(object):
    __metaclass__ = type  # 在python2中我们的类要继承的类用__metaclass__写到类下面静态属性的位置,

    name = 'peter'

    def func(self, z):
        return z + 2
class Foo2(object, metaclass=SheType):  # 在python3中我们就可以直接把它写入到括号里面去
    name = 'judy'

    def func(self, q):
        return q * 2
qq=Foo2()
print(qq.name)

待续~~~~~~~~~~

原文地址:https://www.cnblogs.com/2012-dream/p/7699842.html