到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!. d( n( J0 r) q# ^8 b# ] K7 z
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。3 h, ?+ }5 }6 \2 D+ u# T- Z
1.性能' G) S4 L" s" K8 _ E
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
% A$ q/ P, @9 ^& g以取得很好的优化结果。
% I1 h) @; R. C& x0 gpy3.1性能比py2.5慢15%,还有很大的提升空间。% o! T4 ~$ w3 }9 h3 i# z
2.编码
0 w4 H& j" H9 L$ g6 {7 @py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:7 A/ @- u, K8 l* W
>>> 中国 = 'china'
6 w1 a: x) \# {( j- I6 C" `- u>>>print(中国)
# X$ K4 e5 u% c# J: Zchina. C9 ~/ p$ ^ y% W5 o% O- _# x& g
3. 语法; e) M2 o2 O# _; e7 n u
1)去除了<>,全部改用!=9 l7 A8 @7 Z1 u7 `9 L6 [
2)去除``,全部改用repr()
: a3 g: s( y) N1 b7 @0 f3)关键词加入as 和with,还有true,false,none
( L R: g* G0 g+ A0 L4)整型除法返回浮点数,要得到整型结果,请使用//' X" t7 V' m8 }, R+ V" r4 H, z
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量$ G: n% w+ d3 B' Q Q) v
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
( g0 X) z, \4 N. m" E) ~例如:/ [8 m9 @* Y3 G$ f3 [, H% s8 ]
2.x: print the answer is, 2*2/ R* R8 h2 h2 y- P- v
3.x: print(the answer is, 2*2)
7 [, {0 d+ T% v" ~0 y2.x: print x, # 使用逗号结尾禁止换行* l' `) {; w3 O8 J' \0 U3 e
3.x: print(x, end= ) # 使用空格代替换行) j5 B, |2 L2 M+ C8 K4 ]9 s
2.x: print # 输出新行
* G/ z" [. V" w9 |9 P3.x: print() # 输出新行" X. W: S7 u: R& W0 I
2.x: print >>sys.stderr, fatal error b \& b. Z3 I/ [
3.x: print(fatal error, file=sys.stderr) K; q* Y; \; q) |2 [ ?: b9 r
2.x: print (x, y) # 输出repr((x, y))
- f# `- Z1 R5 K3.x: print((x, y)) # 不同于print(x, y)!1 O1 H y- r2 t/ p e- g, |
7)改变了顺序操作符的行为,例如x
3 \: S$ Z" |" y' B) u; f0 L: G% Y, \- e8)输入函数改变了,删除了raw_input,用input代替:# _" t. k5 k, I6 R$ ^* {
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法$ ?, {' g. Y4 }' S9 @- o7 F
3.x:guess = int(input('enter an integer : '))
W: a7 p4 s! Q- @3 n, j$ K0 S9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了
% P6 g8 c; D- C# @% q8 |- S$ b2 S10)新式的8进制字变量,相应地修改了oct()函数。4 A- `& j6 F0 p) {6 x; K6 S$ Z/ A
2.x的方式如下:
* U3 y6 f" G, P1 H; V8 b>>> 0666
: u5 ]6 o v7 F! \6 l# S2 Y7 ^( _438
# p+ I7 m, z* C3 x- C>>> oct(438)
9 ]% t2 u9 |$ \8 v1 h: ?* h'0666'
/ h6 m& E% W' P3.x这样:$ v+ R; S2 g S/ j! r
>>> 0666. I8 u- r( H+ m- P& u9 B6 ^% h
syntaxerror: invalid token (
/ U/ L: M5 ?+ _' u. f, Z1 [: M6 }: E>>> 0o666
8 o( F5 X5 |8 e: p3 T; g438- P( T: c) \1 n( b
>>> oct(438)
: _, v0 c8 t9 X2 q0 v6 J: `'0o666', _: A$ s* O/ Q) }
11)增加了 2进制字面量和bin()函数
) H! s# p5 c6 n8 k>>> bin(438)
& g. \7 L' {( f' a0 D( n! X'0b110110110'6 _: F- X! ~7 ]2 n' S
>>> _438 = '0b110110110'# s F$ Q: V/ d# [7 N
>>> _438
, K2 d# z5 @8 C'0b110110110'6 v* G( B" }9 I9 o3 E
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list" |( a5 K- S& b
对象和seq是可迭代的。7 A& c& E* P" ~ I9 O. h: m7 B
13)新的super(),可以不再给super()传参数,
) E" n) a1 ?( B; k. j>>> class c(object):$ E6 o; s7 r# F! C! z. Z) f+ w
def __init__(self, a):' z4 r6 z2 \# f
print('c', a)
$ o; k4 f1 P) N0 w>>> class d(c):
/ V9 B# V& r( F* udef __init(self, a):
( p1 p b2 }. W7 R/ H- m+ o: A3 jsuper().__init__(a) # 无参数调用super()) e, \9 F9 n! r# ]% b: `- u9 M* I
>>> d(8)8 p7 V9 s5 d" \
c 8& r7 W* Q" A1 i8 U! G( a: W9 ~" z
<__main__.d object at 0x00d7ed90>; D, @6 n7 \5 `2 n Z% i+ U- _. C
$ y! F8 u0 [9 i
更多网站运营信息请查看: 网站运营 |