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)來得到原始值。