1号晚上听到两声春雷,我觉得它是在告诉我,春天到了,该发点什么了。
我说好啊好啊,这就来发博客。
我们先来看这段网页:
最近碰到这么个问题,有这么个函数,用来将HTML转义字符变回原来的字符:
1 2 3 4 5 6 7 8 9 10 11 12 |
def htmlescape(s): if sys.version_info[0] == 3: # python 3.x unichr = chr def replc(match): dict={'amp':'&','nbsp':' ','quot':'"','lt':'<','gt':'>','copy':'©','reg':'®'} if len(match.groups()) >= 2: if match.group(1) == '#': return unichr(int(match.group(2))) else: return dict.get(match.group(2), '?') htmlre = re.compile("&(#?)(\d{1,5}|\w{1,8}|[a-z]+);") return htmlre.sub(replc, s) |
其中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这个内置函数的,为啥就变成未定义呢?
This is a CLI program that let you set CNAME to use Cloudflare using the partner program.
Both Python2.x and Python3.x is supported. No extra library is needed.
To use Chinese menu, set environment variable LANG
to use UTF-8 (for example, zh_CN.UTF-8).
python ./cloudflare-partner-cli.py
.host_key
. You can get it here..cfhost
.resolve_to
has to be DNS record (for example: google.com) instead of IP address.使用Cloudflare partner功能用CNAME方式接入cloudflare。
你可以使用Python2.x或者Python3.x。无需安装任何依赖。
如需使用中文菜单,请将环境变量的LANG
设置为使用UTF-8 (比如zh_CN.UTF-8)。
python ./cloudflare-partner-cli.py
。host_key
。可以从这里获得。.cfhost
文件中。源站地址
必须为DNS记录,如google.com,不能填写IP地址。
在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)来得到原始值。