到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!& F+ ]6 O+ t2 [1 k8 A7 K5 e( B
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
% t4 `$ F8 I/ {7 Q1.性能* S6 C# Z- Q- R1 Y- l0 r& M& {
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
! i2 n5 ]* n Y( M* p& x以取得很好的优化结果。- b, X2 v/ v4 p) ]" W
py3.1性能比py2.5慢15%,还有很大的提升空间。
7 v6 p4 y4 |$ Z+ Z$ I' w! ?6 I2.编码; g0 N9 ?5 f! d h1 b' B' D
py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:
: K: K3 N% e7 Q# x. f>>> 中国 = 'china'
; L9 ~# C6 K9 h1 T>>>print(中国)6 B* s+ Q: b" T$ s! F" Q
china
* i3 C1 B: f) d# c1 u5 D3. 语法$ c8 k9 Z3 t+ f$ B$ O
1)去除了<>,全部改用!=8 k( G1 s: _& c% ?* @
2)去除``,全部改用repr()
1 b& L% [6 x! b y. P3)关键词加入as 和with,还有true,false,none
7 V/ _, f7 n8 m+ c2 j' t; o' F: z4)整型除法返回浮点数,要得到整型结果,请使用//
; p! H1 i( b2 |, V7 G4 ~5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
5 _* P% k5 Z$ B: Z; M; \, {# i6 t6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数0 s: ?6 |: ^- c* S; G
例如:
; u8 [6 T, u( n- f9 `2.x: print the answer is, 2*2% d/ E9 [* H$ ~1 N
3.x: print(the answer is, 2*2)
$ R9 b F+ N" {# {: {2.x: print x, # 使用逗号结尾禁止换行
% p. U+ _) e% a9 ]6 j5 Z5 b3.x: print(x, end= ) # 使用空格代替换行 S/ O0 D1 T2 z6 m) e
2.x: print # 输出新行" }4 C" z; G1 k( g& a l/ k- ]$ ~
3.x: print() # 输出新行 Y) ^! \. D; P2 P- a* V+ G8 F
2.x: print >>sys.stderr, fatal error
% T& ]& @: K' j( |3.x: print(fatal error, file=sys.stderr). P2 C2 E! g$ r7 \$ k: x
2.x: print (x, y) # 输出repr((x, y))
% p4 _3 ^/ a9 C5 Q. c3.x: print((x, y)) # 不同于print(x, y)!
) k6 q, H+ J% z0 n- @- l7)改变了顺序操作符的行为,例如x( {8 @$ q0 U8 M2 s t6 D
8)输入函数改变了,删除了raw_input,用input代替:% D1 ^9 K' m( R6 t9 K
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法
" w( P* o/ C$ L; a e% w8 b7 {3.x:guess = int(input('enter an integer : '))4 }" ^) f0 ] N4 f0 a) o% I" _
9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了
4 _4 M# m: e( I: U10)新式的8进制字变量,相应地修改了oct()函数。" M5 Z# f: `9 ^3 s9 j1 C
2.x的方式如下:
5 l4 Q, \$ {; t' K: ]! r M7 D>>> 0666" a) f5 L8 z! {% I
438
" L& K& [; w$ \7 P+ f: Q>>> oct(438)
, M f: S1 ?7 h0 T% v( ]'0666'$ a% M1 ] R8 B7 @
3.x这样: b/ O4 c: w. f3 z, c( \5 N
>>> 0666! T- {8 t& m0 g3 s# R7 F
syntaxerror: invalid token (
1 U4 f7 s9 j+ g! K2 E# b) ]0 N>>> 0o666
# d% Y4 w+ N5 Z5 I; k9 E438$ }" t8 H8 T$ T: H: A j
>>> oct(438)
# x- @5 E M' J! B9 W+ |0 O'0o666'
4 C+ Y6 w1 k3 w8 ^) |- M11)增加了 2进制字面量和bin()函数
" Q6 Z+ ?- @% A- h; y2 F>>> bin(438)0 w3 f' E: `# ]/ p# c
'0b110110110'' ?6 c6 q4 g6 C4 e7 Z* W& k
>>> _438 = '0b110110110'
$ I4 o! b. J" ?$ W' R>>> _438
$ b: l( o8 F! \1 D'0b110110110') k: j5 M* C& S" Z9 h; t
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list7 m) a5 Y6 c# b" I1 j" J- o
对象和seq是可迭代的。
" k* O6 A% e0 D13)新的super(),可以不再给super()传参数,$ f; c# Z0 Q& X2 W
>>> class c(object):
% \; F! g* d7 L- E$ Odef __init__(self, a):. J( F. e* l1 J# V
print('c', a)( {* { n( S/ I$ ~
>>> class d(c):. H! @. Y" Z6 h! t% o
def __init(self, a):
+ P6 F7 Y, F* k: E6 \super().__init__(a) # 无参数调用super()
1 `. v6 Y8 F" f% V+ x>>> d(8)% Q& _ W: p% f. t
c 8+ e' m, h# d3 S' y0 @9 W ^% s
<__main__.d object at 0x00d7ed90>
8 C9 E# v" x4 F1 @$ e4 Z
+ b+ K8 v1 f* l, h/ R更多网站运营信息请查看: 网站运营 |
|