Python2x和3x主要差异总结Word文档格式.docx

上传人:b****2 文档编号:13958067 上传时间:2022-10-15 格式:DOCX 页数:16 大小:22.51KB
下载 相关 举报
Python2x和3x主要差异总结Word文档格式.docx_第1页
第1页 / 共16页
Python2x和3x主要差异总结Word文档格式.docx_第2页
第2页 / 共16页
Python2x和3x主要差异总结Word文档格式.docx_第3页
第3页 / 共16页
Python2x和3x主要差异总结Word文档格式.docx_第4页
第4页 / 共16页
Python2x和3x主要差异总结Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Python2x和3x主要差异总结Word文档格式.docx

《Python2x和3x主要差异总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《Python2x和3x主要差异总结Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

Python2x和3x主要差异总结Word文档格式.docx

1000000000000000000000000000000

(2)八进制字面量表示

在Python2.x中,表示八进制字面量有两种方式,一是同众多我们所熟悉的编程语言一样,直接在数字前加0,比如01000,另外是加0o(0和小写字母o)0o1000

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

3

4

0o1000

512

01000

5

6

7

 

File"

<

stdin>

"

line1

01000

^

SyntaxError:

invalidtoken

运算符

(1)不等于测试

Python2.x中不等于有两种写法!

=和<

Python3.x中去掉了<

只有!

=一种写法,还好,我从来没有使用<

的习惯

(2)去掉了repr表达式``

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

Python3.x中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?

不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。

(3)除法运算

Python中的除法较其它语言显得非常高端,有套很复杂的规则。

Python中的除法有两个运算符,/和//

首先来说/除法:

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

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

Python2.x:

1/2

1.0/2.0

0.5

Python3.x:

1/2

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

python2.x:

-1//2

-1

python3.x:

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

importmath

math.trunc(1/2)

math.trunc(-1/2)

(4)比较运算符

Python2.x中允许不同类型的对象进行比较,比如:

-1<

'

'

True

1>

False

Python3.x中则不允许这类不同类型之间含糊不清的比较:

Traceback(mostrecentcalllast):

line1,in<

module>

TypeError:

unorderabletypes:

int()>

str()

我觉着即使在2.x中也不应该使用这种含糊不清的比较,1>

返回了False,这个是基于什么判断的?

说不清楚。

语句

(1)print

这是应该算是最广为人知的一个差别了吧,Python2.x和Python3.x之间连HelloWorld都是不兼容的。

python2.x中print是语句

print>

filex,y

向打开的输出流file中输出x,y变量的值

在python3.x中这句要这么写

print(x,y,file=file)

file参数定义的默认值是sys.stdout

(2)扩展序列解包

python中的序列赋值一直是这门语言宣传时候的一个亮点,能把一个序列解开进行赋值:

8

9

10

11

12

13

14

15

x,y=[1,2]

x

y

x,y=1,2

x,y=y,x

python3.x对这一功能更加进行了强化,支持扩展序列解包:

x,*y=1,2,3

[2,3]

内置集合类型

内置集合的差别主要体现在字典对象的几个视图方法上,keys\items和values,在2.x中这几个试图方法每次都是赤裸裸的返回一个新的列表,3.x对这种粗鲁的行为做了优化,返回的是迭代器对象。

另外原先字典对象有个has_key方法来判断key在字典中是否存在,这个方法实现的功能跟in运算符完全一样,因此在3.x就把这个方法给干掉了。

函数

(1)nonlocal作用域

在2.x的时代,Python只有两个作用域,模块里面的全局作用域和函数的局部作用域,但是随着在函数中定义函数的情况越来越多,比如装饰器、闭包等等,这里面就出现了内层函数引用外层函数变量的问题:

比如我要在内层函数修改外层函数的一个变量,在Python2.x的时代就会出现错误:

defout_function():

... 

call_count=0

defin_function():

call_count+=1

returnin_function

...

out_function()()

line4,inin_function

UnboundLocalError:

localvariable'

call_count'

referencedbeforeassignment

但是在Python3.x中只要使用nonlocal关键字对变量进行修饰,就会自动去外层函数寻找变量:

nonlocalcall_count

call_count+=1

(2)Key-wordonly参数

前面我们说到print在Python3.x中是作为函数提供的。

print的参数设计是这样的:

print(*value,sep='

end='

\n'

file=sys.stdout)

如果了解Python参数的顺序规则,我们知道在Python2.x中,参数的顺序必须遵循以下规则去定义:

deffunction(一般参数or带默认值参数,*sequence,**dict)

而这个地方却允许先定义*sequence再去定义一般参数,这就是Python3.x所支持的key-wordonly的参数形式。

在一个*之后允许去定义一些参数,这些参数在函数调用的时候必须指定参数名称。

这样本质上其实就是在*sequence类型的参数之后固定写死了一个**dict,当然也可以在后面继续定义一个**dict:

deftest(*value,name,**dict):

但这样写就不对了deftest(*value,**dict,name)

(3)map、filter和reduce

这三个函数号称是函数式编程的代表。

在Python3.x和Python2.x中也有了很大的差异。

首先我们先简单的在Python2.x的交互下输入map和filter,看到它们两者的类型是built-infunction:

map

built-infunctionmap>

filter

built-infunctionfilter>

它们输出的结果类型都是列表:

map(lambdax:

x*2,[1,2,3])

[2,4,6]

filter(lambdax:

x%2==0,range(10))

[0,2,4,6,8]

但是在Python3.x中它们却不是这个样子了:

class'

map'

map(print,[1,2,3])

mapobjectat0xa6fd70c>

filter'

filterobjectat0xa6eeeac>

首先它们从函数变成了类,其次,它们的返回结果也从当初的列表成了一个可迭代的对象,我们尝试用next函数来进行手工迭代:

f=filter(lambdax:

x%2==

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1