内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/37903317/is-there-a-python-constant-for-unicode-whitespace
这个问题被确定为 Python -how-to-list-all-characters-matched-by-posix-extended-regex-space?lq=1″>
In Python, how to list all characters matched by POSIX extended regex [:space:]
?的副本,但该问题的答案确定了搜索空格字符来生成自己的列表的方法.这是一个耗时的过程.我的问题就是一个常数.
Is there a Python constant for Unicode whitespace?
简短的答案:不,我在 Python 代码库中个人对这些字符(特别是数字代码点)进行了grepped,而且这个常量不存在.
下面的部分说明为什么它不是必需的,以及如何在没有这些信息作为常数的情况下实现它.但是有这样一个常数也是一个非常糟糕的主意.
如果Unicode Consortium添加了语义空格的另外一个字符/代码点,那么Python的维护者在继续支持语义不正确的代码或者改变可能(不当地)做出假设的常量和可能的破坏的现有代码之前,选择不好关于常数不变.
如何添加这些字符代码点? Unicode中有1,111,998个可能的字符.但截至 version 8 ,只有120,672个被占用.每个新版本的Unicode可能会添加其他字符.这些新角色之一可能是一种空白形式.
信息存储在动态生成的C函数中
确定unicode中什么是空格的代码是以下动态生成的 code .
# Generate code for _PyUnicode_IsWhitespace() print("/* Returns 1 for Unicode characters having the bidirectional", file=fp) print(" * type 'WS', 'B' or 'S' or the category 'Zs', 0 otherwise.", file=fp) print(" */", file=fp) print('int _PyUnicode_IsWhitespace(const Py_UCS4 ch)', file=fp) print('{', file=fp) print(' switch (ch) {', file=fp) for codepoint in sorted(spaces): print(' case 0x%04X:' % (codepoint,), file=fp) print(' return 1;', file=fp) print(' }', file=fp) print(' return 0;', file=fp) print('}', file=fp) print(file=fp)
这是一个switch语句,它是一个常量的代码块,但是这个信息不像模块“constant”那样可用.它被埋在从C编译的函数中,而不是直接从Python访问.
这可能是因为将更多的代码点添加到Unicode中,因为向后兼容性原因,我们将无法更改常量.
生成的代码
以下是当前生成的代码 at the tip :
int _PyUnicode_IsWhitespace(const Py_UCS4 ch) { switch (ch) { case 0x0009: case 0x000A: case 0x000B: case 0x000C: case 0x000D: case 0x001C: case 0x001D: case 0x001E: case 0x001F: case 0x0020: case 0x0085: case 0x00A0: case 0x1680: case 0x2000: case 0x2001: case 0x2002: case 0x2003: case 0x2004: case 0x2005: case 0x2006: case 0x2007: case 0x2008: case 0x2009: case 0x200A: case 0x2028: case 0x2029: case 0x202F: case 0x205F: case 0x3000: return 1; } return 0; }
让自己不断变化:
Python 3中的以下代码(从我的答案 here )生成一个所有空格的常量:
import re import sys s = ''.join(chr(c) for c in range(sys.maxunicode+1)) ws = ''.join(re.findall(r'\s', s))
作为优化,您可以将其存储在代码库中,而不是在每个新进程中自动生成代码,但我谨防止假定它永远不会改变.
>>> ws '\t\n\x0b\x0c\r\x1c\x1d\x1e\x1f \x85\xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000'
(链接的问题的其他答案显示如何获得Python 2.)
记住,有一点,有些人可能认为256字符编码是我们所需要的.
>>> import string >>> string.whitespace ' \t\n\r\x0b\x0c'
如果您坚持在代码库中保持不变,只需为您的Python版本生成常量,并将其存储为文字:
unicode_whitespace = u'\t\n\x0b\x0c\r\x1c\x1d\x1e\x1f \x85\xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000'
u前缀使它在Python 2中是unicode(2.7恰好将上面的整个字符串识别为空格),在Python 3中,默认情况下,字符串字面值为unicode将被忽略.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/37903317/is-there-a-python-constant-for-unicode-whitespace
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- EmptyPage(空白页组件)原理与使用
- ios – UITableView在顶部获得了空白[封闭]
- RecyclerView瀑布流空白、重新排序原因及解决办法
- idea jsp html 空白页的问题
- 利用空白gif图片,实现数据上报,数据埋点
- 5G虚拟化网元安全保障研究填补空白
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Art of Computer Programming, Volume 3
Donald E. Knuth / Addison-Wesley Professional / 1998-05-04 / USD 74.99
Finally, after a wait of more than thirty-five years, the first part of Volume 4 is at last ready for publication. Check out the boxed set that brings together Volumes 1 - 4A in one elegant case, and ......一起来看看 《The Art of Computer Programming, Volume 3》 这本书的介绍吧!