新手学python哪一个版本好?Python2与Python3有何区别?

  为了可以拥有更好的职业发展,很多人都会转行学习编程,而python语言在编程中是很是受欢迎的语言之一,其就业前景好、工资待遇高,深受你们的喜欢和追捧。当咱们学习python前,不少人都会考虑版本选择问题,Python目前有两个版本Python2和Python3,这两个版本学习哪一个好?它们之间有何区别呢?python

  python3 和 python2 是不兼容的,并且差别比较大,python3是不向下兼容的,可是绝大多数组件和扩展都是基于python2的。目前实际应用中大部分暂不考虑 Python3,有的时候注意写兼容 2/3 的代码。用 Python2 为主的写新代码时要考虑之后迁移到 Python3 的可能性。据数据统计显示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。linux

  其实python是linux上最经常使用的软件之一,可是linux目前的版本大部分仍是使用python2的,并且,在linux上依赖python2的程序更多一些,因此 Python3 要代替 python2 成为主流还须要几年的时间。若是为了找工做仍是学Python 2,学会了Python 2,由Python 2转到python3也不难。编程

  Python2与Python3到底有何区别呢?数组

  1.性能ide

  Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操做上能够取得很好的优化结果。函数

  Py3.1性能比Py2.5慢15%,还有很大的提高空间。性能

  2.编码学习

  Py3.X源码文件默认使用utf-8编码,这就使得如下代码是合法的:优化

  >>> 中国 = 'china'ui

  >>>print(中国)

  china

  3. 语法

  1)去除了<>,所有改用!=

  2)去除``,所有改用repr()

  3)关键词加入as 和with,还有True,False,None

  4)整型除法返回浮点数,要获得整型结果,请使用//

  5)加入nonlocal语句。使用noclocal x能够直接指派外围(非全局)变量

  6)去除print语句,加入print()函数实现相同的功能。一样的还有 exec语句,已经改成exec()函数

  4. 字符串和字节串

  1)如今字符串只有str一种类型,但它跟2.x版本的unicode几乎同样。

  2)关于字节串,请参阅“数据类型”的第2条目

  5.数据类型

  1)Py3.X去除了long类型,如今只有一种整型——int,但它的行为就像2.X版本的long

  2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法以下:

  >>> b = b'china'

  >>> type(b)

  str对象和bytes对象能够使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。

  >>> s = b.decode()

  >>> s

  'china'

  >>> b1 = s.encode()

  >>> b1

  b'china'

  3)dict的.keys()、.items 和.values()方法返回迭代器,而以前的iterkeys()等函数都被废弃。同时去掉的还有

  dict.has_key(),用 in替代它吧

  6.面向对象

  1)引入抽象基类(Abstraact Base Classes,ABCs)。

  2)容器类和迭代器类被ABCs化,因此cellections模块里的类型比Py2.5多了不少。

  3)迭代器的next()方法更名为next(),并增长内置函数next(),用以调用迭代器的next()方法

  4)增长了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。

  7.异常

  1)因此异常都从 BaseException继承,并删除了StardardError

  2)去除了异常类的序列行为和.message属性

  3)用 raise Exception(args)代替 raise Exception, args语法

  4)捕获异常的语法改变,引入了as关键字来标识异常实例,在Py2.5中:

  >>> try:

  ... raise NotImplementedError('Error')

  ... except NotImplementedError, error:

  ... print error.message

  ...

  Error

  在Py3.0中:

  >>> try:

  raise NotImplementedError('Error')

  except NotImplementedError as error: #注意这个 as

  print(str(error))

  Error

  5)异常链,由于context在3.0a1版本中没有实现

  8.模块变更

  1)移除了cPickle模块,能够使用pickle模块代替。最终咱们将会有一个透明高效的模块。

  2)移除了imageop模块

  3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2,

  rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块

  4)移除了bsddb模块(单独发布,能够从Python "bindings" for Oracle Berkeley DB获取)

  5)移除了new模块

  6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下

  7)tokenize模块如今使用bytes工做。主要的入口点再也不是generate_tokens,而是 tokenize.tokenize()

相关文章
相关标签/搜索