有效的原始代码。
tbl = dict.fromkeys(i for i in xrange(sys.maxunicode) if unicodedata.category(unichr(i)).startswith('P'))
但是当我想查看()
中的内容时,我收到了错误消息。
i for i in xrange(sys.maxunicode) if unicodedata.category(unichr(i)).startswith('P')
File "<ipython-input-58-3979c9c43bba>", line 1
i for i in xrange(sys.maxunicode) if unicodedata.category(unichr(i)).startswith('P')
^
SyntaxError: invalid syntax
括号之间的代码让我感到困惑,似乎原始代码等于下面的代码,但为什么会这样?
for i in xrange(sys.maxunicode):
if unicodedata.category(unichr(i)).startswith('P'):
a.append(i)
tbl=dict.fromkeys(a)
答案 0 :(得分:3)
您有generator expression,通常必须用括号括起来:
(i for i in xrange(sys.maxunicode) if unicodedata.category(unichr(i)).startswith('P'))
当表达式是通话的唯一参数时,括号是可选的,这就是为什么您没有看到dict.fromkeys()
来电的原因。
如果您想查看生成器表达式产生的值,您可能希望使用list comprehension代替,方括号替换括号:
[i for i in xrange(sys.maxunicode) if unicodedata.category(unichr(i)).startswith('P')]
生成器表达式生成一个生成器,必须迭代它以获取它的所有值,而列表推导立即迭代并生成一个列表。