广告
返回顶部
首页 > 资讯 > 后端开发 > Python >13条Python2.x和3.x的区别?
  • 918
分享到

13条Python2.x和3.x的区别?

区别 2023-01-31 02:01:43 918人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

从今天开始,小明将和你一起过一下,那些在面试「python开发」岗位时面试官喜欢问的问题。内容基础,但是你不一定会噢。 这些问题全部来自个人经验,群友推荐以及网络上的帖子。如果你有好的问题,也可以随时向我提出(不要觉得简单),我会筛选后整理

从今天开始,小明将和你一起过一下,那些在面试python开发」岗位时面试官喜欢问的问题。内容基础,但是你不一定会噢。

这些问题全部来自个人经验,群友推荐以及网络上的帖子。如果你有好的问题,也可以随时向我提出(不要觉得简单),我会筛选后整理出来在这里,供大家学习取经,给大家在求职路上贡献一份力。

开篇讲些什么好呢?

今天就来罗列一下,python2.x和3.x到底有哪些区别吧。

你随便全使用搜索引擎都可以查到这些资料,但是大家说的都是一些普遍都知道的事儿。或者都是抄来抄去,内容相差无几。

授人以鱼,不如授人以渔。

在列举之前,我要先教下大家,如何找到那没有经人加工过的第一手资料。

那当然是官网啦:https://www.Python.org/downloads/

这个地址里,有所有Python历史版本(2.0+)。
点击左边,Release Version栏目 对应的版本。
13条Python2.x和3.x的区别?

进入对应详情页后,找到如图 what's new in Python xx 就可以查看此版本的新特性。
13条Python2.x和3.x的区别?

网页是全英文的,需要你有一定的英文阅读能力。快去感觉一下吧。

接下来。和大家一起过一下,Python2.x和3.x到底有哪些区别,这不仅在你开发过程中需要考虑的,也是面试过程面试官经常会问及的。

在Python 2.6之前,只支持

print "hello"

在Python 2.6和2.7中,可以支持如下三种

print "hello"
print("hello")
print ("hello")

python3.x中,可以支持如下两种

print("hello")
print ("hello")

在Python2.x中,默认使用ASCII编码。

所以默认情况下,我们不能在程序中使用中文。若要使用中文,必须在文件头部,声明使用 "UTF-8" 编码,并在使用的时候注意编码转换,要打印的时候需先转成"Unicode"编码,否则会乱码。

Python 2的正确使用方法,如下

# coding:utf-8

str1="中国"
print str1.decode("utf-8")

亦或者可以这样,u表示,这个字符串使用Unicode编码,不再需要转换。

# coding:utf-8

str1=u"中国"
print str1

在Python3.x中,默认使用Unicode的UTF-8编码。

所以我们可以在程序中,随意的使用中文(但并不推荐),不会报错。

Python 2.x中除法运算,整数间运算只保留整数(向下取整)。

>>> 8/2
4
>>> 8/3
2
>>> -8/3
-3
>>> -8/3.0
-2.6666666666666665

Python 3.x中除法运算,全部保留小数(即使能被整除)。

>>> 8/2
4.0
>>> 8/3
2.6666666666666665

这里要说明一下,3.x 中的//用法和 2.x 用法是一样的。这个运算叫做 floor 运算,即向下取整。

>>> 8//2   
4          
>>> 8//3   
2
>>> -8//3.0
-3.0

在 Python 3 中,只能使用 as 作为关键词。而在Python 2中经常使用 except Exception, e
使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。

Python 2.6已经支持这两种语法。

  • 在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。
  • 2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。

在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。

首先,要了解的是,xrange是只有在Python2.x中才有的产物。

在 2.x 中xrange和range的使用方法可以说完全一致。只是从内部来看,range是返回一个list对象,而xrange返回一个生成器对象,所以在处理大批量数据时,xrange的性能会更好。

>>>xrange(1,5)
xrange(1, 5)

>>>list(xrange(1,5))
[1, 2, 3, 4]

而在3.x 中,只有range函数,为什么没有xrange,因为3.x中的range其实就是2.x中的xrange。你可以这样理解。

>>> range(10)
range(0, 10)

在2.x 中,有两个函数。raw_input()和input()。

  • raw_input():将所有输入作为字符串看待,返回字符串类型。
  • input():只能接收"数字"的输入。

在3.x 中,对这两个函数进行整合,只留下一个input(),既可输入数字,也可输入字符串,返回的是字符串类型。

Python 3.x 一个很重要的特性是,对字符串和二进制数据流做了明确的区分。

文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。

Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。

更为详细的剖析,可以前往:Https://www.cnblogs.com/chownjy/p/6625299.html

还有一点是,3.X去除了long类型,取代它的是整型(int)。3.x的整型是没有限制大小的,可以当做long类型使用, 但实际上由于机器内存的有限,我们使用的整数是不可能无限大的。

在Python中,我们常常使用到的map,filter,reduce,在2.x和3.x中也有所不同。

在2.x中,这三货,是内建函数。返回的是一个列表。


>>> map
<built-in function map>

>>> filter
<built-in function filter>

>>> map(lambda x:x *2, [1,2,3])
[2, 4, 6]

>>> filter(lambda x:x %2 ==0,range(10))
[0, 2, 4, 6, 8]

在3.x中,前面两货,却变成类了。返回的是可迭代对象。

>>> map
<class 'map'>

>>> map(print,[1,2,3])
<map object at 0x10d8bd400>

>>> filter
<class 'filter'>

>>> filter(lambda x:x % 2 == 0, range(10))
<filter object at 0x10d8bd3c8>

对于 reduce 函数,它在 Python 3.x 中已经不属于 built-in 了,被挪到 functools 模块当中。

在Python3.3后,协程中,新增了yield from 和 async/await 关键字,这在2.x中是没有。

关于yield from的语法剖析,可以前往查看我的另一篇文章。

Python2.x 默认使用经典类,只有显示继承object才是新式类。

Python3.x 没有经典类,只有新式类,而且有三种写法

class Cls:
    pass

class Cls():
    pass

class Cls(object):
    pass
  • 在2.x中无法将局部变量声明为全局变量。
  • 在3.x中可以使用nonlocal语法将局部变量声明为全局变量。
def foo():
    var=100
    def bar():
        nonlocal var
        var=200
    bar()
    print(var)
foo()

# 2.x输出:100
# 3.x输出:200

在2.x 中

class Metaclass(type):
    pass

class Person(list):
    __metaclass__ = Metaclass 
    pass

在3.x中

class MetaPerson(type):
    pass

class Person(metaclass=MetaPerson):
    pass
  • 去掉了一些模块。由于不常用,这里就不列举了。
  • 新增了一些模块。比如:concurrent.futures,asyncio等
  • 修改了一些模块。比如:Queue改成queue。

大概就是这些内容,可能还有更细微的差别,这些内容要前往官网查看。但是那些对于我们普通开发者来说,并不那么重要。完全可以不去关注。

实际上,当我熟悉一个版本后,基本上是可以无缝过渡到另一个版本的。这篇文章,更多的是为了科普和应对面试。

--结束END--

本文标题: 13条Python2.x和3.x的区别?

本文链接: https://www.lsjlt.com/news/185552.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 13条Python2.x和3.x的区别?
    从今天开始,小明将和你一起过一下,那些在面试「Python开发」岗位时面试官喜欢问的问题。内容基础,但是你不一定会噢。 这些问题全部来自个人经验,群友推荐以及网络上的帖子。如果你有好的问题,也可以随时向我提出(不要觉得简单),我会筛选后整理...
    99+
    2023-01-31
    区别
  • Python2.x与3.x版本区别
                              Python2.x与3.x版本区别   Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。    为了不带入过多的...
    99+
    2023-01-31
    区别 版本
  • Python2.x与3​​.x版本区别
    Python 3.0的变化主要在以下几个方面: print 函数 print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2...
    99+
    2023-01-31
    区别 版本
  • Python2.x与Python3.x的区别
    Python的3​​.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的...
    99+
    2022-06-04
    区别
  • jquery版本2.x和3.x的区别有哪些
    这篇文章主要讲解了“jquery版本2.x和3.x的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jquery版本2.x和3.x的区别有哪些”吧!...
    99+
    2022-10-19
  • python2和3整数的区别有哪些
    小编给大家分享一下python2和3整数的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python是什么意思Python是一种跨平台的、具有解释性、编...
    99+
    2023-06-14
  • Mysql的锁(S锁和X锁的区别)
    共享锁和排它锁 Mysql的锁系统:shared lock 和 exclusive lock (共享锁和排它锁,也叫读锁和写锁,即read lock和write lock) 读锁是共享的,或者说是相互不...
    99+
    2022-10-18
  • form-data和x-www-form-urlencoded的区别和延伸
    一、前言 form-data和x-www-form-urlencoded,它们完整的表示是multipart/form-data和application/x-www-form-urlencoded。 为了方便,我们下面就用form-data...
    99+
    2023-09-05
    java spring
  • python2和3的区别丶网络编程以及s
      1.编码&字符串     字符串:       python2:         Unicode    v = u"root"  本质上用unicode存储(万国码)         (str/bytes)   v = "r...
    99+
    2023-01-30
    网络编程 区别
  • vue2.x版本中computed和watch的使用及关联和区别
    目录前言区别补充结语前言 前面篇介绍了computed和watch的基本使用vue2.x版详解computed和watch的使用 两者的区别,继续通过代码实现的方式具体去了解 htm...
    99+
    2022-11-13
  • 一步步从Vue3.x源码上理解ref和reactive的区别
    目录前言使用原理refreactive总结前言 对于 ref 和 reactive, 应该说是只要用了Vue3.x就会接触到 因为想要触发响应式,就必须通过 ref 和 reacti...
    99+
    2023-02-06
    vue3.x ref reactive vue ref reactive
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作