Tag Archives

14 Articles

Python局部变量的坑

0   10272 转为繁体

最近碰到这么个问题,有这么个函数,用来将HTML转义字符变回原来的字符:

其中unichr用来将一个整数转换成Unicode字符,仅在Python2中存在。Python3中,chr可以同时处理ASCII字符和Unicode字符。所以我们在Python3环境中将unichr映射到chr上。

运行这段代码会在第8行报错:NameError: free variable ‘unichr’ referenced before assignment in enclosing scope。而且只有Python2会报错,Python3不会。

 

首先从问题上看,报错的原因是在闭包replc里unichr没有定义。

但是Python2明明是有unichr这个内置函数的,为啥就变成未定义呢?

Read More

Python float和decimal

2   10272 转为繁体

在Windows上打包Python脚本时遇到一个需求,将浮点数转成字符数组,比如输入1.001,得到[‘1′,’0′,’0′,’1’]

一开始想当然地用了:

version = 2.001

v = list(str(int(version * 1000)))

发现好像哪里不对,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想应该是浮点数的精度问题,因为一看version * 1000 = 1000.9999999999999

所以有这么几种解决方法:

v = list(str(int(round(version * 1000))))

或者:

v = list(str(version).replace(“,”, “”) + “000”)[:4]

或者用decimal模块,decimal是固定小数点位数的,用的是十进制乘除法,所以(在设定的位数内)不会产生误差:

from decimal import getcontext, Decimal

getcontext().prec = 4

v = list(str(Decimal(version) * 1000))

需要注意的是decimal会自动转换科学计数法,可以用”%d” % Decimal(d)来得到原始值。

 

Python中热补丁(Hot Patching)的实现和一些问题

2   16188 转为繁体

有时候我们可能需要只修改一部分代码而且要求修改立即生效,或者为了高可用性不允许停止服务程序,这时我们就需要热补丁

在debian,red hat等系统(或者vista之后的windows)的软件更新时,通常使用替换符号链接来达到高可用性。

对Python来说,解释器预先处理了脚本生成字节码,并读入内存;所以之后硬盘上的文件发生了什么变化,就只能想办法命令解释器重新读入新的脚本。实现这个功能的内建命令是reload

Read More

迅雷快鸟(diǎo)路由器版

557   294615 转为繁体

可以在路由器或者同一网络下的任意设备上登陆并心跳,这样就不用开电脑也不用在手机里装奇怪的应用了。

对我有洁癖你来打我呀

436919cbgw1erq704m1h4g205k049nfa有问题请留言。如果你要报告一个问题,请同时注明:

  • 所使用的版本 (Python/Shell)
  • 运行的系统环境及版本 (操作系统,Python版本等)
  • 包含错误信息的日志
  • 产生错误的操作步骤
  • (可选) 运营商所在地,如:上海电信

Read More

闲扯Python 说说内存

11   18205 转为繁体

首先,不用解释器,脑补一下下面这段代码的结果是什么

有没有娃儿和我一样觉得是[0,1,0]的?

Read More