到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!. b. f3 M m" ~& l+ e/ }6 G+ {7 r4 @
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
3 D6 \ h, X j& H( {1.性能
; M: |6 t* g! U# `+ O" @( e5 Cpy3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
8 I% a" }* Z* o4 ?/ f" u. |以取得很好的优化结果。
" \: e }' e, }& c: ^8 D3 Fpy3.1性能比py2.5慢15%,还有很大的提升空间。* C* u) |7 A5 J% J
2.编码, g/ {: H& W& Y( J8 T$ _
py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:
+ G7 q5 Z/ ? a2 u& y3 Q- C>>> 中国 = 'china'4 [1 g4 ^2 z( v9 m ~
>>>print(中国)
$ H" |( m0 X/ r5 `* Z' Ochina3 i& v5 O, L; l F& A y1 r
3. 语法
' S& s, m" U4 n* a+ w, j1)去除了<>,全部改用!=8 e% W. h9 `4 c8 ^3 S- V
2)去除``,全部改用repr()8 H( K; w* |+ f2 G- ~1 v0 ~
3)关键词加入as 和with,还有true,false,none
1 K6 i6 C# ~9 \4)整型除法返回浮点数,要得到整型结果,请使用//$ }' U' w- \- W H
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量' }7 R2 d, k* N, c
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数/ o6 \% D: P f+ l+ W
例如:$ e/ ?- L7 q( i! I3 j/ Q. x+ P
2.x: print the answer is, 2*2
% g: E0 {5 W- n2 T. I3.x: print(the answer is, 2*2)
; x2 z" x' g3 H4 u2.x: print x, # 使用逗号结尾禁止换行
) z' w. L5 {- u8 h+ D$ a. x3.x: print(x, end= ) # 使用空格代替换行! Y: S! J; H* Q! s( y% @0 a$ S
2.x: print # 输出新行
) K" l, R) h- |$ _. G: h6 M3.x: print() # 输出新行" T% U5 [: v [( \% l5 ]
2.x: print >>sys.stderr, fatal error
* o4 ?% x* t" |9 Y- H. j3.x: print(fatal error, file=sys.stderr)6 W. [7 y) W; q; y% w9 ?; T# q
2.x: print (x, y) # 输出repr((x, y))
: l" m: n3 |0 J/ y9 {8 S3 t: s3.x: print((x, y)) # 不同于print(x, y)!
4 \9 f f6 Z* T$ W; N7)改变了顺序操作符的行为,例如x K5 |( H8 c) _1 W7 S |( n3 P
8)输入函数改变了,删除了raw_input,用input代替:
! g; w f" Z) K- R2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法4 p6 {: `) I" S7 l. n! n4 L4 W2 N
3.x:guess = int(input('enter an integer : '))! i: h2 U8 R! q
9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了* L. A! C. U1 F' I) h4 f
10)新式的8进制字变量,相应地修改了oct()函数。8 i" R6 G. f5 Y) ]! A5 \
2.x的方式如下:, t! A2 {8 i) ]8 J! d
>>> 0666
, {9 d4 K% Y; a438
: [" \6 x1 ]! I>>> oct(438)
/ c4 C, h& X9 q( |2 K' [6 w; A* j'0666'
' Y7 Z, x( K2 p* P2 F3.x这样:' a9 u, m! K: k( v
>>> 0666
; N+ Z4 n9 C5 j9 d5 ~+ Fsyntaxerror: invalid token (
8 `3 o% r/ w* f>>> 0o666
8 A8 R+ U, E$ r+ y438
+ d6 _+ T/ E S t5 F: f>>> oct(438)( K! ]) \& ^' o6 h$ u8 p5 R$ ^
'0o666'
- p I4 a( Z, \6 J1 w) F11)增加了 2进制字面量和bin()函数. _, R% Z& t7 a$ D
>>> bin(438)
$ w& Q* I0 ^, k" R0 z, G- _# M'0b110110110'
$ @7 u+ }. F* e- N1 p>>> _438 = '0b110110110'
* T# V; ^3 ? q: x) x>>> _4381 I, O; C- {. K7 W
'0b110110110'
1 ^7 e( z8 U" F% A. N! O, b12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list
" L' k+ K! z( t$ E1 G对象和seq是可迭代的。- ~0 R6 ^- a3 l4 Q
13)新的super(),可以不再给super()传参数, S1 u4 [ g$ j( D' @! a
>>> class c(object):
. g$ ^* `2 W6 \5 Z. Ddef __init__(self, a):9 c+ @1 ]0 G4 |$ l+ l
print('c', a): v7 M# w! p8 z. h/ X
>>> class d(c):7 w1 q( b2 j( E
def __init(self, a):% u4 V/ ] B% O Q/ {1 z
super().__init__(a) # 无参数调用super() S- T" K5 D" p& J1 ~* k
>>> d(8)
V! i% V: M5 M, r4 z4 V0 R3 qc 8% o# W1 v5 u& i8 K. H5 x& N
<__main__.d object at 0x00d7ed90>
# A% {6 w" q3 ~/ C9 q& W2 M0 h% y6 h3 g7 x8 @
更多网站运营信息请查看: 网站运营 |