得知互动
标题:
python 2和python 3有什么区别?
[打印本页]
作者:
swmozowtfl
时间:
2015-7-28 11:33
标题:
python 2和python 3有什么区别?
到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!
7 k" L/ r8 Z3 E: O
搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
, p/ S6 y; b) h1 {# l
1.性能
8 }+ x7 d* G- W1 H
py3.0运行 pystone benchmark的速度比py2.5慢30%。guido认为py3.0有极大的优化空间,在字符串和整形操作上可
& v, V. Y: U a
以取得很好的优化结果。
- F: L0 x( @! q2 `, T- ~# B$ S
py3.1性能比py2.5慢15%,还有很大的提升空间。
2 Y4 i* Q0 q3 t! _; C
2.编码
4 q1 u& [" r* V; q3 D/ U
py3.x源码文件默认使用utf-8编码,这就使得以下代码是合法的:
& I; P7 F. q9 w/ d
>>> 中国 = 'china'
+ l- V% X8 P8 i, [- p
>>>print(中国)
8 n$ D# A3 N6 C) L X+ r. B
china
$ |3 t( d. r6 g$ e" p) D
3. 语法
* E$ t8 j: c9 _# V3 O' l4 h$ y" t4 E
1)去除了<>,全部改用!=
8 }8 x( h0 ?3 `9 Q
2)去除``,全部改用repr()
& i8 ^5 f, \3 ^$ c& X- v' W
3)关键词加入as 和with,还有true,false,none
( k/ F2 E1 T9 `9 F0 c' j' c
4)整型除法返回浮点数,要得到整型结果,请使用//
9 B. d/ E& o7 d. h& p) {
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
* z8 M. j" G. G, t$ l( s- k
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
* x* r# g# M9 q- x0 _3 i& w4 O0 g
例如:
# N8 W; R' G7 U, _) W& |
2.x: print the answer is, 2*2
; u- Y9 W+ j0 H" @: ]; `
3.x: print(the answer is, 2*2)
% n, m. M/ h' m) l, c& i1 R0 n; X) `
2.x: print x, # 使用逗号结尾禁止换行
0 q: e( e* O% i* U5 A
3.x: print(x, end= ) # 使用空格代替换行
% d0 Y2 u/ O+ p5 E% m
2.x: print # 输出新行
$ a5 E8 a7 b v* |
3.x: print() # 输出新行
& y. Z" ]/ f) `5 ~5 S1 j
2.x: print >>sys.stderr, fatal error
( V$ S+ k/ _' c2 x
3.x: print(fatal error, file=sys.stderr)
6 F3 ]5 E j/ M' r) S* E* y
2.x: print (x, y) # 输出repr((x, y))
# a+ Y# b& O# @% U
3.x: print((x, y)) # 不同于print(x, y)!
: V/ U- m9 e4 [9 i
7)改变了顺序操作符的行为,例如x
7 j! m' d/ p0 Y. Z$ p. B
8)输入函数改变了,删除了raw_input,用input代替:
0 A- z; o$ a- i# t
2.x:guess = int(raw_input('enter an integer : ')) # 读取键盘输入的方法
/ ?1 M L0 e" r; D' h
3.x:guess = int(input('enter an integer : '))
3 W, I, g" _ \3 R) O: S% A
9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了
$ p7 ?' Y2 O. M2 T. z& N
10)新式的8进制字变量,相应地修改了oct()函数。
+ U1 s! v3 ^+ e6 U
2.x的方式如下:
' M9 K4 Q% [9 ^) [) D! S
>>> 0666
% s& \1 T! e6 U7 v/ S3 q V
438
, Z0 i c3 W$ n) \& }
>>> oct(438)
" i* c$ f: t1 i( H2 ^1 R( J3 w% u
'0666'
- U8 N/ ~/ R& }& Y
3.x这样:
9 X" x2 A) h" d6 |) b
>>> 0666
1 X2 z9 e r1 F
syntaxerror: invalid token (
. U% ~, d& N3 M$ J
>>> 0o666
% U5 e! ]- @! G3 I; o
438
# ]9 {% S4 B* y. e
>>> oct(438)
) \6 s9 R, H9 D% I
'0o666'
9 k0 W, I" v/ F, \, R
11)增加了 2进制字面量和bin()函数
7 ~" r3 x( u$ y2 ^1 Q
>>> bin(438)
; Y; S' a7 g$ b, d* o: ~* ^7 d
'0b110110110'
8 [2 w$ G. ~& J8 b' P
>>> _438 = '0b110110110'
9 V2 _7 j" K Q/ p; Y/ X# c& ]( w
>>> _438
$ p$ e( m0 u3 d7 m* P1 g
'0b110110110'
( ?. Y2 M' \* J
12)扩展的可迭代解包。在py3.x 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list
% p/ g) r) {& k" y- s- o" \, Z
对象和seq是可迭代的。
0 D2 t' E1 t* V. `9 D
13)新的super(),可以不再给super()传参数,
S4 ?" F3 y* O1 i- j8 w' g7 o
>>> class c(object):
# a) n" [- C, D4 `
def __init__(self, a):
! }0 f2 r7 |6 ?) L1 r' p" n
print('c', a)
8 ?. i. I+ } ?6 `* T
>>> class d(c):
1 ~$ u/ n' ]' f j
def __init(self, a):
1 D- h4 B- B/ U: o
super().__init__(a) # 无参数调用super()
/ e+ X- x2 n2 o0 W* t' D- m
>>> d(8)
' D) Q9 p" n/ J* U* _& c3 q
c 8
" n* R6 `' l' z1 ?3 s# ^4 i1 A" E
<__main__.d object at 0x00d7ed90>
h, @% S: F* F. ?, y1 X
- l% Y: n# Q" m5 Q
更多网站运营信息请查看:
网站运营
作者:
tohme
时间:
2016-1-16 18:22
我只是为了十万积分默默奋斗。
作者:
wwdu926a
时间:
2016-1-16 18:22
你可是难得来坐坐啊~~~
作者:
mwxny
时间:
2016-1-16 18:23
你还想说什么啊....
作者:
bqtklouu
时间:
2016-1-16 18:23
命不能争,运可以造,弱者认命,强者抗命,能者求命,智者造命。
作者:
wwdu926a
时间:
2016-1-16 18:23
楼主说的是什么?我是小白,好像还没看明白!
作者:
GoodyFouppy
时间:
2016-3-10 09:58
俺灌的不是水,是寂寞啊!
作者:
wwdu926a
时间:
2016-3-10 09:58
综上所述,恳请各位官员请勿动用武装力量请勿跨村、跨镇、跨市、跨省、跨国、跨洲、跨星球、跨银河系追捕。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证
作者:
gevaemaidovef
时间:
2016-3-10 09:59
什么?????不知道......
作者:
buingeEvineus
时间:
2016-3-10 09:59
一骂人就激动....
作者:
mwxny
时间:
2016-3-10 09:59
估计你是没见识过~` 呵呵
欢迎光临 得知互动 (https://bbs.dezhifl.com/)
Powered by Discuz! X3.4