初学Python之三:Python2.x和Python3.x的不同之处分析及面试回答

简介

  • 由于我要看到书和视频教程都是使用Python2.x来编写的,而这里准备使用的Python是3.6的版本,所以我觉得有必要在此之前了解这两个版本的不同之处。
  • 由于这也是面试经常被问到的问题,所以这里准备了两个方面:
    (1)系统分析两者的不同。
    (2)面试时候的回答内容。

不同之处

(1)系统分析两者的不同:
Python2.x与3​​.x版本区别-菜鸟教程
Python2.x与3​​.x版本区别

在这里做一个简单的总结:
1.性能上:Python2.x较Python3.x性能较高,不过Python3.x毕竟还在发展,所以有很大的提升空间。
2.这里主要讲语法上:

#Python2.x

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

#Python3.x

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'
  • print 函数:print语句没有了,取而代之的是print()函数。当然2.6和2.7也支持print()(exec语句被python3废弃,统一使用exec函数)

    print "fish" #3.x不支持
    print ("fish") #注意print后面有个空格
    print("fish") #print()不能带有任何其它参数
  • 除法运算 Python3.x使用‘/’表示浮点数运算

    
    #Python 2.x:
    
    >>> 1 / 2
    0
    >>> 1.0 / 2.0
    0.5
    
    #Python 3.x:
    
    >>> 1/2
    0.5

    当然如果要在Python中还有一个符号‘//’(java中表注释)为执行一个floor(向下取整其中向上取整为ceil)

    
    #Python(2.x and 3.x)
    
    >>> -1 // 2
    -1
    

    这里对floor、ceil和trunc做一个区别

#Python2.x在此floorceiltrunc会表现为浮点数形式
print(6/5)#输出结果为1.2
print( math.floor(6/5)) #输出结果1
print( math.ceil(6/5))#输出结果2
print( math.trunc(6/5))#输出结果1
print( 6//5)#输出结果1
#可见floor取最小整数(去除小数位)输出和trunc(截取整数一致),
#而ceil是去整数部分+1
  • 不等运算符
    Python 2.x中不等于有两种写法 != 和 <>
    Python 3.x中去掉了<>
  • 去掉了repr表达式 “

Python2.x可以使用反引号 “ 代表repr()

Python 3.x 中去掉了“这种写法,只允许使用repr函数

#这里讲解下repr()和str()的区别:
#函数str() 用于将值转化为适于人阅读的形式,
#而repr() 转化为供解释器读取的形式

#例如
#Python2.x
>>> print repr("hello, world!")  
'hello, world!'  
>>> print repr(1000L) #注意Python3.x不在支持long型所以Python3.x会报错 
1000L  
>>> print str("hello, wolrd!")  
hello, wolrd!  
>>> print str(1000L)  
1000  
#顺便扩展下eval()函数
#eval()官方文档里面给出来的功能解释是:
#将字符串string对象转化为有效的表达式参与求值运算返回计算结果
  • 数字类型去除long型
    1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
    2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:
>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 
#str对象和bytes对象可以使用.encode() (str -> bytes) or .decode()
# (bytes -> str)方法相互转化。
>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 
  • range模块
    对于Python2.x中有xrange()和range()的区别:可参考博文Python2.x中xrange和range的区别
    而Python3.x则废除xrange而采用range()来代替,且功能更加强大
    Python3.x中的xrange和Python2.x中range的区别
    在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中xrange() 会抛出命名异常)。
    在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。
      这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。
      由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

  • 先写到这里,后续学习将加以完善,也希望路过的朋友可以在评论区补充下谢谢

面试回答

问:是否了解Python2.7.x与Python3.x的主要差异?
答:
· 使用 _ future _ 模块(用于旧版本向新版本更替)
· print 函数(Python3.x仅仅可以使用print())
· int代替long型
· Unicode(Python3.x默认使用utf-8)
· xrange(Python3.x不在支持xrange)
· Raising exceptions
· Handling exceptions
· next() 函数 和 .next() 方法
· For 循环变量和全局命名空间泄漏
· 比较不可排序类型
· 通过 input() 解析用户的输入
· 返回可迭代对象,而不是列表

猜你喜欢

转载自blog.csdn.net/weixin_40763557/article/details/80564081