Python3和Python2的区别

2017-09-18  本文已影响0人  子午河洲

1.性能


2.编码

 >>> 中国 = 'china'    
 >>>print(中国)     
 china  

3. 语法

2.X: print "The answer is", 2*2       
3.X: print("The answer is", 2*2)       
2.X: print x,                              # 使用逗号结尾禁止换行       
3.X: print(x, end=" ")                     # 使用空格代替换行 
2.X: print                                 # 输出新行       
3.X: print()                               # 输出新行       
2.X: print >>sys.stderr, "fatal error"       
3.X: print("fatal error", file=sys.stderr)    
2.X: print (x, y)                          # 输出repr((x, y))       
3.X: print((x, y))                         # 不同于print(x, y)!  
2.X:guess = int(raw_input('Enter an integer : ')) # 读取键盘输入的方法    
3.X:guess = int(input('Enter an integer : '))
>>> 0666       
438      
>>> oct(438)      
'0666'     

           3.X这样:

>>> 0666      
 SyntaxError: invalid token (<pyshell#63>, line 1)       
>>> 0o666       
438      
>>> oct(438)       
'0o666'  
>>> bin(438)     
'0b110110110'      
>>> _438 = '0b110110110'      
>>> _438      
'0b110110110'  
>>> class C(object):            
    def __init__(self, a):              
        print('C', a)     
 >>> class D(C):            
    def __init(self, a):               
        super().__init__(a) # 无参数调用super()      
>>> D(8)     
C 8      
<__main__.D object at 0x00D7ED90>  
class Foo(*bases, **kwds):        
    pass  
>>> def foo(cls_a):            
    def print_func(self):               
        print('Hello, world!')            
    cls_a.print = print_func            
    return cls_a      
>>> @foo      
class C(object):        
    pass      
>>> C().print()      
Hello, world!  

class decorator可以用来玩玩狸猫换太子的把戏。


4. 字符串和字节串


5.数据类型

>>> b = b'china'      
>>> type(b)      
<type 'bytes'>  

str对象和bytes对象可以使用.encode() (str -> bytes) or.decode() (bytes -> str)方法相互转化。

>>> s = b.decode()      
>>> s      
'china'      
>>> b1 = s.encode()      
>>> b1      
b'china'  

6.面向对象
1)引入抽象基类(Abstraact Base Classes,ABCs)。
2)容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.5多了很多。

>>> import collections      
>>> print('\n'.join(dir(collections)))      
Callable      
Container      
Hashable      
ItemsView      
Iterable      
Iterator      
KeysView      
Mapping      
MappingView      
MutableMapping      
MutableSequence      
MutableSet      
NamedTuple      
Sequence      
Set      
Sized      
ValuesView     
 __all__      
__builtins__      
__doc__      
__file__      
__name__      
_abcoll     
 _itemgetter      
_sys      
defaultdict      
deque 

另外,数值类型也被ABCs化。


7.异常

在Py2.5中:

>>> try:      
...    raise NotImplementedError('Error')      
... except NotImplementedError, error:
...    print error.message      
...      
Error  

在Py3.0中:

>>> try:            
    raise NotImplementedError('Error')          
  except NotImplementedError as error: #注意这个 as            
    print(str(error))      
Error  

8.模块变动


9.其它

>>> list(range(10))     
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

在Py2.5中:

>>> file      
<type 'file'>  

在Py3.X中:

 >>> file      
Traceback (most recent call last):      
File "<pyshell#120>", line 1, in <module>         
    file      
NameError: name 'file' is not defined
上一篇下一篇

猜你喜欢

热点阅读