Python3与Python2有哪些区别?

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

from future import print_function
print(“fish”, “panda”, sep=', ')




---


#### 


#### 输入函数


python2中用raw\_input



guess = int(raw_input('输入一个整数: '))

读取键盘输入的方法


python3中用input



guess = int(input('输入一个整数: '))


#### Unicode


Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。


现在, 在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。


由于 Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:



中国 = ‘china’
print(中国)
china
Python 2.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’
Python 3.x

str = “我爱北京天安门”
str
‘我爱北京天安门’


#### 


#### 除法运算


Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//


首先来说/除法:


在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。


在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。


Python 2.x:



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

1/2
0.5


而对于//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是一致的。


python 2.x:



-1 // 2
-1
python 3.x:

-1 // 2
-1


注意的是并不是舍弃小数部分,而是执行 floor 操作,如果要截取整数部分,那么需要使用 math 模块的 trunc 函数


python 3.x:



import math
math.trunc(1 / 2)
0
math.trunc(-1 / 2)
0


#### 


**异常**


* 所以异常都从 `BaseException`继承,并删除了`StardardError`
* 去除了异常类的序列行为和`.message`属性
* 用 `raise Exception(args)`代替`raise Exception, args`语法
* 捕获异常的语法改变,
* 引入了`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


* 异常链,因为`__context__`在3.0a1版本中没有实现


#### xrange


在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如:for 循环或者是列表/集合/字典推导式。


这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。


由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。


在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。



list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


#### 


#### 八进制字面量表示


八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。


新增了一个bin()函数用于将一个整数转换成二进制字串。Python 2.6已经支持这两种语法。


在Python 3.x中,表示八进制字面量的方式只有一种,就是0o1000。


python 2.x



0o1000
512
01000
512


python 3.x



01000
File “”, line 1
01000
^
SyntaxError: invalid token
0o1000
512


#### 不等运算符


Python 2.x中不等于有两种写法 != 和 <>


Python 3.x中去掉了<>, 只有!=一种写法,还好,我从来没有使用<>的习惯


#### 去掉了repr表达式``


Python 2.x 中反引号``相当于repr函数的作用


Python 3.x 中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。



def sendMail(from_: str, to: str, title: str, body: str) -> bool:
pass


#### 多个模块被改名(根据PEP8)




| 旧的名字 | 新的名字 |
| --- | --- |
| \_winreg | winreg |
| ConfigParser | configparser |
| copy\_reg | copyreg |
| Queue | queue |
| SocketServer | socketserver |
| repr | reprlib |


StringIO模块现在被合并到新的io模组内。new, md5, gopherlib等模块被删除。Python 2.6已经支援新的io模组。


httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。


取消了exec语句,只剩下exec()函数。Python 2.6已经支援exec()函数。


#### 5.数据类型


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**) 或 .decode() (**bytes -> str**)方法相互转化。



s = b.decode()
s
‘china’
b1 = s.encode()
b1
b’china’


3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has\_key(),用 in替代它吧 。


**其它**


1.`bytes`对象不能`hash`,也不支持 `b.lower()`、`b.strip()`和`b.split()`方法,但对于后两者可以使用 `b.strip(b’ \n\t\r \f’)`和`b.split(b’ ‘)`来达到相同目的


2.`zip()`、`map()`和`filter()`都返回迭代器。而`apply()`、 `callable()`、`coerce()`、 `execfile()`、`reduce()`和`reload ()`函数都被去除了




### 最后

> **🍅 硬核资料**:关注即可领取PPT模板、简历模板、行业经典书籍PDF。  
> **🍅 技术互助**:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。  
> **🍅 面试题库**:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。  
> **🍅 知识体系**:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值