得知互动
标题:
python 2和python 3有什么区别?
[打印本页]
作者:
swmozowtfl
时间:
2015-7-28 11:33
标题:
python 2和python 3有什么区别?
到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!
/ H; `# _- U) `9 V$ p
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
8 A1 y! |7 m8 K
1.性能
' ?/ V) t2 m) K1 V4 m
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
4 y# S( }* B. d8 ^) ?" q/ v W
以取得很好的优化结果。
- J% e) `- R9 W
py3.1性能比py2.5慢15%,还有很大的提升空间。
" _1 D9 j: P7 r+ q7 p
2.编码
7 k3 T4 Q- y5 t$ J# k
py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:
7 F+ }- g' g; Q* I' `' O) o; V P
>>> 中国 = 'china'
' j( @' Y3 Q( N( S
>>>print(中国)
}: Q& O! @) M7 m$ i$ i. Z
china
$ k2 S, N6 d" C j8 U6 F
3. 语法
: T; F6 Q& W" i" Q- u. l4 z7 H2 L
1)去除了<>,全部改用!=
; `: E; k# C7 K5 t, F; p" U
2)去除``,全部改用repr()
+ y1 F4 W6 m W
3)关键词加入as 和with,还有true,false,none
! C) I. L$ G5 ]! w5 V
4)整型除法返回浮点数,要得到整型结果,请使用//
$ F- q# P! @6 @/ k$ v
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
0 j h3 K$ j+ ~$ T% l
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
- T5 f/ Z! n8 z2 |
例如:
4 v% C4 T/ M& G4 r# o
2.x: print the answer is, 2*2
/ I$ u1 U/ a" t1 j% C# r
3.x: print(the answer is, 2*2)
1 O) n1 J9 R8 d8 y* M' Q
2.x: print x, # 使用逗号结尾禁止换行
+ w7 X, c6 ^+ M
3.x: print(x, end= ) # 使用空格代替换行
; A7 f, @4 S0 n" Z- ~' S
2.x: print # 输出新行
) L8 m9 ]5 R& I
3.x: print() # 输出新行
; t! l: t w! k2 M/ P- Z( n
2.x: print >>sys.stderr, fatal error
. q6 ?( w1 I; f3 T9 l4 q
3.x: print(fatal error, file=sys.stderr)
: b: o) y- @# D K9 W
2.x: print (x, y) # 输出repr((x, y))
1 t% K& Q# T2 B+ c4 y: S6 W: O
3.x: print((x, y)) # 不同于print(x, y)!
* j" A& x% y6 [% q: J! _( x
7)改变了顺序操作符的行为,例如x
0 M# Y% P2 Q! V* P! `
8)输入函数改变了,删除了raw_input,用input代替:
, G9 I; ^' @, w# V r+ E+ W: a" S
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法
9 i8 i2 [5 u+ Z+ v. ^
3.x:guess = int(input('enter an integer : '))
$ S, \7 h9 F% ~$ Q- A0 e
9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了
# S D( M) E z! a
10)新式的8进制字变量,相应地修改了oct()函数。
! a$ Z7 P" {+ i0 j7 a7 `; I" v
2.x的方式如下:
6 K7 y% |8 x* I9 E0 u# i& Y
>>> 0666
/ v' E! o& L$ X
438
* O. r* B, T- o+ Y; f
>>> oct(438)
# g' d1 V5 H1 G4 Y2 l
'0666'
9 ?' K3 p% ^ o' h8 e& [
3.x这样:
& ^ s- |6 e: o. M% W# I
>>> 0666
# T$ _6 H* B* a" A e0 y
syntaxerror: invalid token (
$ H3 J- d7 G% t# c" c1 A
>>> 0o666
- {# H. Y/ N' s6 @4 b7 P
438
; V2 k$ H- ], C& S; `1 @' _
>>> oct(438)
6 Z* v8 m2 a8 Y" x% G
'0o666'
Y& Y9 R# ]% F) T2 M2 Y
11)增加了 2进制字面量和bin()函数
. y5 B* p8 P4 P1 ]- i
>>> bin(438)
7 {4 ?2 B+ R7 E1 {) C1 _6 b* s
'0b110110110'
' ?9 q+ ]8 T+ @ N
>>> _438 = '0b110110110'
6 X4 B( ?) J& n% G9 T9 e
>>> _438
. q* ~0 X1 i: v. k8 W
'0b110110110'
& u I5 m$ `( c/ A
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list
; O" S/ @0 {- a
对象和seq是可迭代的。
9 y/ q9 U8 C9 }4 m5 l
13)新的super(),可以不再给super()传参数,
~% ^( ?& m9 r" N$ O; Z9 @: X* F
>>> class c(object):
/ t: j" J; U# b% @- h& }: U
def __init__(self, a):
! H+ p9 s$ o' Q5 ~# {4 H% J+ @) w
print('c', a)
2 L& Q8 ?: I& a& u: z/ l1 K: W ^$ I
>>> class d(c):
6 M# k c8 Q8 w
def __init(self, a):
: I; O3 l0 b# i- I
super().__init__(a) # 无参数调用super()
" y& y+ u- z2 t5 c/ v/ u1 s
>>> d(8)
( J+ R( `9 Z) I" U$ S
c 8
- E& @" D7 d0 A7 n9 C: k* c }
<__main__.d object at 0x00d7ed90>
4 H! `; M, q; }; l f
m% L& H. `! U6 z$ Q- l
更多网站运营信息请查看:
网站运营
作者:
tohme
时间:
2016-1-16 18:22
我只是为了十万积分默默奋斗。
作者:
wwdu926a
时间:
2016-1-16 18:22
你可是难得来坐坐啊~~~
作者:
mwxny
时间:
2016-1-16 18:23
你还想说什么啊....
作者:
bqtklouu
时间:
2016-1-16 18:23
命不能争,运可以造,弱者认命,强者抗命,能者求命,智者造命。
作者:
wwdu926a
时间:
2016-1-16 18:23
楼主说的是什么?我是小白,好像还没看明白!
作者:
GoodyFouppy
时间:
2016-3-10 09:58
俺灌的不是水,是寂寞啊!
作者:
wwdu926a
时间:
2016-3-10 09:58
综上所述,恳请各位官员请勿动用武装力量请勿跨村、跨镇、跨市、跨省、跨国、跨洲、跨星球、跨银河系追捕。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证
作者:
gevaemaidovef
时间:
2016-3-10 09:59
什么?????不知道......
作者:
buingeEvineus
时间:
2016-3-10 09:59
一骂人就激动....
作者:
mwxny
时间:
2016-3-10 09:59
估计你是没见识过~` 呵呵
欢迎光临 得知互动 (https://bbs.dezhifl.com/)
Powered by Discuz! X3.4