[翻译]移植代码到Python3(二)

标准库的重组织
-移除了"愚蠢的老东西"
-模块重命名,遵循PEP-8(Python Enhancement Proposals,Style Guide for Python Code)
-工具2to3可以帮你完成大部分移植工作

 

Python2中糟糕的名字,违反了PEP 8

Python2

Python3

import _winreg
import ConfigParser
import copy_reg
import Queue
import SocketServer
import __builtin__
import repr
import test.test_support

import winreg
import configparser
import copyreg
import queue
import socketserver
import builtins
import reprlib
import test.support

 

Python3中自动使用优化的实现

Python2

Python3

try:
    import cStringIO as StringIO
except ImportError:
    import StringIO


try:
    import cPickle as pickle
except ImportError:
    import pickle

import io

 

 

 

 

import pickle                

 

Python2

Python3

import HTMLParser
import htmlentitydefs


import xmlrpclib
import DocXMLRPCServer
import SimpleXMLRPCServer


import dbhash
import dbm
import gdbm
import anydbm
import whichdb

import html.parser
import html.entities


import xmlrpc.client
import xmlrpc.server

 


import dbm.bsd
import dbm.ndbm
import dbm.gnu
import dbm

 

 

-移除了一些模块:compiler,popen2 htmllib, sgmllib, urllib,md5等等
-工具2to3不处理这些
-重写你的代码,避免使用弃用的模块
-从PEP 3108查看所有的替换

附注:pickle数据需要重新产生(即两个版本产生的格式不一样)

 

 


 

 

iterators和views
-许多API不再返回列表,而是返回一个iterator或view
-例如dict.keys(),.values()和.items()返回views。


-view是一个类似集合的对象,可以进行标准的集合操作,如加和减

map(),filter(),zip()返回iterators。

Python2

Python3

a = map(lambda x: x[1], items)


for name in map(str.lower, names):
     ...


a = filter(lambda n: n%2==0, nums)


for key in filter(str.isdigit, keys):
     ...


dict(zip(sins, persons))

a = [x[1] for x in items]


no change

 


a = [n for n in nums if n%2==0]

 

no change

 

 

no change

 

-xrange()是新的range().
-大部分代码不需要修改

特殊方法:slicing
-__getslice__和friends不再支持
-使用__getitem__来替代

特殊方法:丰富的比较

取消了3路比较

Python2

Python3

 


 

 

语法改变:异常

 

Python2

Python3

try:
    with open(fn, 'r') as f:
        lines = list(f)
except (IOError, OSError), err:
    log_error(err)

try:
    with open(fn, 'r') as f:
        lines = list(f)
except (IOError, OSError) as err:
    log_error(err)

 

语法改变:相关引入

json/
 |-  encoder.py
 |-  decoder.py
 |-  __init__.py


在文件__init__.py中:

 

语法改变:set和dict理解

-新集合语法



-集合理解

-辞典理解

 

语法改变:其他细微差别

-扩展可迭代拆包

-nonlocal声明用于访问外部变量

-函数注解

 

(未完待续)

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值