到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!0 A7 F7 [. ]# g9 f) ^
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
! A$ o" q- a5 V; U1.性能9 }1 \: \4 z% i+ q
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
6 B9 Y0 m7 g% Q7 j3 w, b( t以取得很好的优化结果。 o7 i! e0 r. X* ?2 W- K7 }3 g
py3.1性能比py2.5慢15%,还有很大的提升空间。8 R; F/ k- y5 q* U1 b) {
2.编码$ c7 G: Z6 A- `; m( a
py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:/ Z2 c/ g0 S$ `; d
>>> 中国 = 'china'7 H1 D0 e* ~: b& Y7 J; b
>>>print(中国)
& ^2 p1 f' Y: A0 achina% ~2 x; [ ]" d% _5 k+ n, S8 |# g0 h
3. 语法
2 V7 Y$ k) Y0 S; {1)去除了<>,全部改用!=
" P' ]% t$ v; Q3 Z" B! x) R5 P5 P2)去除``,全部改用repr()! H: o: h, M9 \3 c2 O7 I2 y
3)关键词加入as 和with,还有true,false,none2 H' k% F+ V, T& K
4)整型除法返回浮点数,要得到整型结果,请使用//2 l7 ]0 P- n* l* f! u
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
0 K/ M. s F! e% C) ?2 t, z6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数& U) U9 I3 E$ g- _0 C
例如:
( J5 T5 y* t Q3 ` \3 e+ ~2.x: print the answer is, 2*2. J( B- x. L* O2 } H+ B' P* G6 p: i
3.x: print(the answer is, 2*2)
' }6 J+ W% x# V- g1 k* y; ~. i2.x: print x, # 使用逗号结尾禁止换行3 x. {3 M! f6 B4 Z1 |
3.x: print(x, end= ) # 使用空格代替换行& X7 x! @( I3 ?* C
2.x: print # 输出新行8 v9 [2 J5 L1 z M: ]. I
3.x: print() # 输出新行
- m: E; n! m3 h+ W. b! v6 s2.x: print >>sys.stderr, fatal error
/ j% P+ Z- L3 E [/ N3.x: print(fatal error, file=sys.stderr)! S8 d) }& G" V; F5 t6 o
2.x: print (x, y) # 输出repr((x, y))% g! _7 `" U0 X, C, B8 W% h
3.x: print((x, y)) # 不同于print(x, y)!
, j l6 \' d1 ^0 p8 ~) T$ Q7)改变了顺序操作符的行为,例如x
3 ^, ~" I$ |% l8)输入函数改变了,删除了raw_input,用input代替:7 J- {7 Q8 W/ \( y, b! z2 h; T
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法
j4 L; l0 D5 W3.x:guess = int(input('enter an integer : '))
5 L! j4 I7 j5 v; y% {- M9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了; r! x" J2 l2 s" H' }1 @! n+ x* d
10)新式的8进制字变量,相应地修改了oct()函数。: Y9 S. \6 E2 `+ B+ K) D
2.x的方式如下:
6 \; `3 w2 F! N- a>>> 06665 n: l7 w5 X) K" m
438! |' z/ u/ S# @
>>> oct(438)8 G7 r# S& P) P# ]* E/ e2 {
'0666'
* |( D1 T& Z2 J* S3.x这样:
! h$ C8 W6 f9 }>>> 0666- ^# o( X4 R; o) W4 G
syntaxerror: invalid token (1 r4 M5 o. N% y3 R! m: S6 b6 D
>>> 0o666- z7 e- A* h) ]/ g
438
: g0 u% k* p% @( s! O8 `>>> oct(438)
) a' k& E3 v- E'0o666'& N8 L* F) n1 z. c
11)增加了 2进制字面量和bin()函数/ u4 y' J: U6 N: p0 b9 k
>>> bin(438)
6 ?% T; a. O9 ]6 b- C: e/ A4 U'0b110110110'
2 \0 J4 g2 A3 X8 |( R$ b# c: {5 Z# |>>> _438 = '0b110110110'
) b3 b5 G/ a9 z7 _>>> _438
^9 W; z& E# i; W' @& c'0b110110110'7 \; Q3 r" ~1 m
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list: `8 ~3 B/ |% Q, X. C/ z: J
对象和seq是可迭代的。" G! ?7 s0 u& P4 z* ~7 ?) x! K
13)新的super(),可以不再给super()传参数,; L V3 r, C: y) _. {/ H7 b
>>> class c(object):* c- m. r E( o" Q
def __init__(self, a):$ z9 A( i3 V' X+ r. o3 ]
print('c', a)
: a+ w! g [' x; m r7 n; N8 k8 w>>> class d(c):9 [0 K5 V R& C* b! B$ y
def __init(self, a):
" [' Q% K6 s5 o( Jsuper().__init__(a) # 无参数调用super(), ]. H8 }, Y- Q+ J; c2 u
>>> d(8)& a* r) C2 j/ w/ a
c 8- w4 Q8 b* S5 Y5 t
<__main__.d object at 0x00d7ed90>( D# }$ c7 Y: f0 g9 L7 H3 w) M
( p8 P( Y. r: C+ m
更多网站运营信息请查看: 网站运营 |