到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!, ^3 u& T; z6 ?9 m7 Y- x
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
' |6 e1 f& l0 }! d1.性能) G8 ]' c( e- y7 Y/ _& I6 g% k
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
! i& d5 q- W" t8 c& v! @# _. \, c以取得很好的优化结果。- x% }' `! ~* M
py3.1性能比py2.5慢15%,还有很大的提升空间。
. K# b5 e. g8 c ~$ e% ?2.编码
! T/ j2 U+ I- S# ?$ dpy3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:! u/ L* ~2 z, M3 C4 `; ~
>>> 中国 = 'china'
3 M h( }; x I>>>print(中国)5 i" t1 R' [+ `8 D
china
* e8 m( i& y$ V- z3. 语法
* \, ~5 }3 y3 i# x1)去除了<>,全部改用!=( ?! w8 `/ O2 `. b
2)去除``,全部改用repr()
0 j) W9 N% v* X; f/ h3)关键词加入as 和with,还有true,false,none& k( F- }( b' C+ a5 x3 K
4)整型除法返回浮点数,要得到整型结果,请使用//
0 ?7 K1 J- V! O* ^$ h5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量* h" z* x. l8 Y
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
. }; {5 Z8 I: c9 d" t* o例如:" H* T/ c5 s. \
2.x: print the answer is, 2*20 a9 L D3 [2 ]* u$ ]8 I
3.x: print(the answer is, 2*2)
" H& a# i/ J) s8 [$ Q2.x: print x, # 使用逗号结尾禁止换行
; S: s) G# b; j" i7 P/ C3.x: print(x, end= ) # 使用空格代替换行
( Z. G+ b+ J5 d! t! \2.x: print # 输出新行
q6 j' T" [( F+ T3 L3.x: print() # 输出新行' K1 u! G. ^7 ]
2.x: print >>sys.stderr, fatal error: I, n( Z, M; E2 A4 z- f
3.x: print(fatal error, file=sys.stderr); k) ^2 Y5 u9 c4 s. y: V6 K
2.x: print (x, y) # 输出repr((x, y))
p. y! a2 G+ \% _4 u. d# `* x: _3.x: print((x, y)) # 不同于print(x, y)!
Y- {+ F0 H0 F. T6 z& d7)改变了顺序操作符的行为,例如x! `6 s9 w( q$ w/ G+ q
8)输入函数改变了,删除了raw_input,用input代替:+ T- B! i) c# X( Y- R1 o
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法9 v# y, e9 Q9 A' ~+ L; P# W7 F
3.x:guess = int(input('enter an integer : '))
: z9 W3 m* Q: ^9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了# U$ p/ t; v/ X
10)新式的8进制字变量,相应地修改了oct()函数。
# B$ }9 o' o$ z) x2 x2.x的方式如下:
. O1 S7 s1 w, v! N>>> 0666
- T; c6 k. F# o( L# F$ K. b3 t1 s2 |; p4 Q438; v/ a: t; v$ m' A: I, ?
>>> oct(438)& m& L1 ~% \1 s: M% R, N8 g* L
'0666'
5 k/ u8 ~" J7 G( v3.x这样:
0 p* E& u# |% x! ^# W>>> 0666
/ B! x0 Q' l x7 v' k& l# Nsyntaxerror: invalid token (* G2 b/ M# y% Y3 T' S
>>> 0o6660 j0 I) C1 o+ g& Y# `! k. ]
4388 T2 {! [# H0 S* X
>>> oct(438)$ J/ W4 F' E1 X1 b2 R
'0o666'. O) D3 X" w3 ?) ?' W, C' l
11)增加了 2进制字面量和bin()函数 o& m6 B" Q$ a, U4 l4 P8 I$ m
>>> bin(438)6 L% u$ |3 ~9 |/ Z* y4 h1 l
'0b110110110'
l! X( [4 E4 K+ Q% s: i>>> _438 = '0b110110110'
) C7 I" A: b2 G6 V$ K>>> _438# Y; }0 U' k. l8 i7 t$ K! a
'0b110110110'; T9 M# Y! M, j( c- h1 u: C; f
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list
4 |! m- m' F+ m5 {% G6 \$ P对象和seq是可迭代的。
7 ^! |4 R7 M: k! m13)新的super(),可以不再给super()传参数,
- ]# T9 z+ g- x C6 f* f>>> class c(object):
) }& ^' i$ u" h$ F* w1 ~8 E. ^def __init__(self, a):
, Z" b* `) i$ r* Rprint('c', a)0 N) J% }2 d, |4 U
>>> class d(c):
% R3 a# b5 X0 `1 }1 B% ddef __init(self, a):
7 K7 D! ?) L& B! esuper().__init__(a) # 无参数调用super()
! A$ W6 G( L. ]/ Q) i( o6 {>>> d(8)/ Y+ G' h: }2 ?+ t5 B7 T
c 83 K) E% b Q2 J6 x1 ]% U3 }
<__main__.d object at 0x00d7ed90>* V3 n8 t/ R; `( s6 P/ g
. ]! Q: Z; |/ [% Y% r- ~; O
更多网站运营信息请查看: 网站运营 |
|