到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!+ d! k: n# l0 X, Y9 z, u
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。2 h3 P: `5 j# W& y
1.性能# u" W; r8 F# E# i. |
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可. | |4 s; B# S1 _7 C6 [; H9 \
以取得很好的优化结果。. w+ W' H7 O# S9 S
py3.1性能比py2.5慢15%,还有很大的提升空间。% o0 V. D, t4 L8 y( A7 G4 @
2.编码
) b2 w- p3 p+ A7 B- F }py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:3 \ q1 r% _% u( Q! s) F' v6 @) a
>>> 中国 = 'china'7 P" M& c# O8 v D5 U& [
>>>print(中国)8 ]+ o% e- N$ N, d0 o# d9 n$ K# U; O
china
1 \% {, X4 J& Q, s3. 语法
4 r- o; t1 Y* v1)去除了<>,全部改用!=8 L: w8 G+ i7 ^
2)去除``,全部改用repr()
9 A0 O- u% m$ U. w3)关键词加入as 和with,还有true,false,none) r/ [4 L' i. H* m+ i+ h
4)整型除法返回浮点数,要得到整型结果,请使用//0 U. Q3 L% d2 M
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量: m3 v+ p# O4 e
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
! x- }: Q$ Z* O6 c例如:* |2 G* r7 [! d# [6 j6 i% }9 C; ~
2.x: print the answer is, 2*2( v! d+ g+ s$ l9 o
3.x: print(the answer is, 2*2)# y) I/ n: w. M S
2.x: print x, # 使用逗号结尾禁止换行3 ^" @/ W$ g, O
3.x: print(x, end= ) # 使用空格代替换行
5 K8 w& V* N4 @* {/ e- }: H2.x: print # 输出新行: t6 k3 D, o7 K: A. H& K* t
3.x: print() # 输出新行2 t6 t4 j) f) X B+ H! b8 N
2.x: print >>sys.stderr, fatal error
$ W, ` L# e! I0 B( ~7 y" A, a3.x: print(fatal error, file=sys.stderr)% u) ~" C# @2 V9 @6 K" P) I
2.x: print (x, y) # 输出repr((x, y))! \4 [" L" s; U8 O" ?0 N
3.x: print((x, y)) # 不同于print(x, y)!' p8 k0 g0 T/ `) C* l7 {
7)改变了顺序操作符的行为,例如x* T* y! h. r" W, X
8)输入函数改变了,删除了raw_input,用input代替:; n+ V) Q& n- W' o6 ~/ O/ b) g
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法6 R' y8 i3 q* L' o
3.x:guess = int(input('enter an integer : '))
8 {6 r* m3 K2 | o7 c9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了- \, m, C0 D; m" ~8 U% l9 A. | c
10)新式的8进制字变量,相应地修改了oct()函数。
0 a0 T+ |6 Z3 y9 {$ s) Q* y! T2.x的方式如下:+ M2 f j/ e* T2 i( F& Q$ h
>>> 0666
2 l3 T% v0 N* H- E) d438
$ k Q8 e! d5 t5 w! f: H4 T>>> oct(438)
8 R3 `8 {2 n! S0 I. m$ ^'0666'
! J8 [1 y9 E8 Q& C$ |5 v3.x这样:
e; T. O, F& ~$ H2 e6 k>>> 0666
4 C8 U% ?1 {: z7 p6 Dsyntaxerror: invalid token (
) v4 R* N) y: c, w4 a>>> 0o666
* k4 q: o6 r7 b& c/ b438
1 ^% J- W. I, y2 t2 e+ u! E>>> oct(438)
3 ~/ T% l) F5 L# J( p+ [: e'0o666' ~, [; q1 B% d; Y9 C# U
11)增加了 2进制字面量和bin()函数: d" M6 V$ O* i: |
>>> bin(438)
2 h7 |+ m6 a5 `3 q! q2 t; B'0b110110110'
( b. l0 W/ p- c8 ~7 \1 |. `$ S>>> _438 = '0b110110110'3 e6 q! u7 ?! j$ u
>>> _438
6 \& y( B8 e5 t! b0 K' R M+ ^* u'0b110110110'6 U5 o! x/ r4 ^) i8 }6 N$ `
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list
% z3 x) O6 a5 K4 f, F* b6 _对象和seq是可迭代的。
8 p9 s# E: Y6 z3 {& S% N; Z( y13)新的super(),可以不再给super()传参数,
+ N2 J* Z3 r) F>>> class c(object):
7 \4 |8 s. h! [8 mdef __init__(self, a):, Z7 P: Y# R* o# E* }
print('c', a)
8 v4 j1 L# E3 Y+ t>>> class d(c):( \% z+ v7 ~; |! ~: u1 k2 s
def __init(self, a):
2 G- M7 j' @! ?8 F0 P' U9 ]super().__init__(a) # 无参数调用super()
' r' q; m9 o3 X& O8 }- h>>> d(8)0 w, G& f \/ i9 @( h9 v; Q6 ?
c 8
7 F9 V) J1 \* o3 R$ V) J<__main__.d object at 0x00d7ed90>
1 F4 ?9 l) I$ c- T5 W
4 k- h( f0 ?8 {2 B$ G* M更多网站运营信息请查看: 网站运营 |