py2和py3语法区别

 

关键字
Python2
Python3
解决方法
备注
apply() 内建函数 移除

2to3 fixer

Deprecated since release 2.3
buffer 内建type 移除

使用 memoryview

2to3 fixer需要指定才能覆盖到bufferg
callable 内建函数 3.0移除但3.2及之后重新加入

迁移到py3.6后版本

3.0中可以使用hasattr(bool, '__call__')
Class old/new style两种 移除old style    
cmp() 内建函数 移除 def cmp(): return (a > b) - (a < b)  
coerce() 内建函数 移除

使用numeric operator

 
Dict
  • iterkeys()
  • itervalues()
  • iteritems()
  • keys()
  • values()
  • iterms()

2to3 fixer

py3中iter前缀没有意义
except
  • except (Exception1, Exception2), target
  • except (Exception1, Exception2) as target:

2to3 fixer

py3不能直接raise string
Exception objects
>>> e = Exception('arg1', 'arg2')
>>> print(e)
('arg1', 'arg2')
>>> print(e[1])
arg2
>>> e = Exception('arg1', 'arg2')
>>> print(e)
('arg1', 'arg2')
>>> print(e.args[1])
arg2
2to3 fixer  
exec statement 函数
  • 2to3 fixer
  • six exec_()
 
execfile statement 移除

2to3 fixer

exec(open(thefile).read())

file

内建type 移除

使用open(pathname)

如果是检查类型,使用io.IOBase

filter return list return iterator 2to3 fixer  
Imports

假定csv为自建包

import csv导入自建包

import csv导入系统包 relative imports from __future__ import absolute_import可以改变py3的import策略
Indentation 同一文件,tab和space可以混合使用 同一文件,不能混合 统一风格  
raw_input() 内建函数 重命名为input() 2to3 fixer  
Integer division 3 / 2 → 1 3 / 2 → 1.5 使用// from __future__ import division
int&long 两种整型 合并为int    
map 返回list 返回iterator    
map

longest strategy

>>> def fun(a, b):
 
... if b is not None: ... return a - b ... return -a
 
>>> map(fun, range(5), [3,2,1]) [-3, -1, 1, -3, -4]

shortest strategy

>>> def fun(a, b):
...     if b is not None:
...         return a - b
...     return -a
...
>>> list(map(fun, range(5), [3,2,1]))
[-3, -1, 1]
>>> from itertools import starmap, zip_longest
 
>>> def fun(a, b):
 
... if b is not None: ... return a - b ... return -a
 
>>> list(starmap(fun, zip_longest(range(5), [3,2,1]))) [-3, -1, 1, -3, -4]
 
Metaclass __metaclass__ attribute metaclass parameter
  • 2to3 fixer
  • six
 
.next() .next() method next() built in
  • 2to3 fixer
  • six
 
Parameter unpacking
>>> def unpacks(a, (b, c)): ... return a,b,c
 
>>> unpacks(1, (2,3)) (1, 2, 3)
>>> def unpacks(a, b):
 
... return a,b[0],b[1]
 
>>> unpacks(1, (2,3)) (1, 2, 3)
   
print statement built in function 2to3 fixer  
raise raise E, V, T raise E(V).with_traceback(T)

2to3 fixer

 

E是Exception class

V是可选的Exception value

T是traceback object

range()

xrange()

range return list

xrange return genrator

range移除

xrange重命名为range

2to3 fixer  
repr `` 替换为repr

2to3 fixer

 
round
  • always return float
  • halfway case → alway from zero
>>> round(1.5)
2.0
>>> round(2.5)
3.0
>>> round(10.0/3, 0)
3.0
  • return int
  • halfway case → towards nearest even
>>> round(1.5) 2
>>> round(2.5) 2
>>> round(10.0/3, 0)
3.0
  py3中round传入第二个可选参数,则返回类型同传入的第一参数的类型
sort sorted(iterable, cmp=None, key=None, reverse=False) sorted(iterable, /, *, key=None, reverse=False) 需要手工fix 没有了cmp
StandardError 异常类型 移除 2to3 使用Exception
 
posted @ 2019-05-09 11:26  G先生  阅读(335)  评论(0编辑  收藏  举报

:guocheng