KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

[代发][更新]文本编码转换 源码[Python]

[ 7150 查看 / 7 回复 ]

python字符串+=效率一直不佳,每次都会重新创建对象,因此有强迫症的人可能会这样去转换编码:
"".join([eachfile.decode(de).encode('utf-8') for eachfile in file])
优势是:列表推导可以预先进行存储优化(加速内存分配),join 操作则是内存一次直接拷贝(减少操作次数)
这类做法速度要快好几倍,其它迭代通常也会用类似的思想
缺点是内存吃的要多一些
最后编辑公主的猫 最后编辑于 2013-12-22 08:25:56
1

评分次数

    分享 转发
    TOP

    2.7和3基本上语法通用了,差异主要是在于使用的一些库,还有就是unicode,str和bytes之间的关系,新开发的东西很方便就可以在代码层面上实现兼容,不需要2to3之类的东西

    至于安装,大多数linux和unix上现在2.x都是标配,而且比较新的版本很多还并存有3.x(使用命令python 3),gentoo更是已经把3.3作为默认的python。

    没有自带3.x的也不担心,随便搜一艘,rpm,deb,dmg包一堆,自己编译一个一般也就15分钟搞定,建议尽量用3吧。

    windows的话感觉安装也没压力,安装程序默认进行了文件关联,自带IDEL,唯一的问题可能就是想再命令行下使用需要自己添加环境变量。

    语法上建议尽可能遵从3.x
    print("hello world!")
    这种写法2.6以上版本都不会有问题
    TOP

    對了有個Pies
    最新版本2.5.0
    是py 2和3 的兼容層。
    詳見開源中國 oschina.net
    リン 发表于 2013/12/24 20:40:00


    如果已经决定把工作环境转移到python3的话,其实寻求一个兼容层意义就不大了
    猫自己写的web框架是基于python3的,同时兼容2.7,实际上兼容性的代码总共就是个位数的行,而且都集中在IO操作方面,个人觉得有经验的开发者,编码时就能有效避免兼容问题
    更何况现在更多的情况是2to3的情况,极少出现3to2的情况

    还有一些问题是兼容层无法直接搞定的历史问题,例如使用相当频繁的print;在2.x时代print是作为语句使用的,但是到了3.x为了适合函数式编程print变为了函数,尽管2.6以后python2也允许print("something")这样的语法,但是print作为语句的特性并没有改变,例如下面的表达式在python3里面是成立的,但是2却报错:
    y and print("z")
    为了实现兼容就需要定义一个近似的函数
    def xprint(*arg,**darg):
        #do something
    这个实现不仅麻烦,低效,而且今后程序的部署也对兼通层产生了强烈的依赖,成为下一个历史遗留问题。
    其实换个思路,解决办法其实很简单:不去使用这样的用法,至少现在不要去使用 》《

    现在python3遇到的最大囧境是:很多项目几乎都停留在2.x,不论人员还是代码,这使得我们看到的很多第三方3.x库都是2.x环境下开发,然后用2to3转换到3。由于3.x推进缓慢,加上又有2to3这样本身已经很成熟的工具,所以短时间内想让各个项目组转移到3.x环境下进行开发就不太现实。

    虽然大多数人目前都还是看好python3的未来,但是这一个未来真正到来还是有些遥远的
    最后编辑公主的猫 最后编辑于 2014-01-24 21:03:54
    TOP