Python 编程语言有哪些鲜为人知但有用的功能?
>>> x = 5
>>> 1 < x < 10
True
>>> 10 < x < 20
False
>>> x < 10 < x*10 < 100
True
>>> 10 > x <= 9
True
>>> 5 == x > 4
True
如果你认为它正在做1 < x
,它出现为True
,然后比较True < 10
,这也是True
,那么不,那真的不是发生了什么(参见最后一个例子。)它真的转化为1 < x and x < 10
, x < 10 and 10 < x * 10 and x*10 < 100
,但键入较少,每个术语仅评估一次。
获取 python 正则表达式解析树来调试你的正则表达式。
正则表达式是 python 的一个很好的特性,但调试它们可能会很麻烦,并且很容易让正则表达式出错。
幸运的是,python 可以通过将未记录的,实验性的隐藏标志re.DEBUG
(实际上是 128)传递给re.compile
来打印正则表达式解析树。
>>> re.compile("^\[font(?:=(?P<size>[-+][0-9]{1,2}))?\](.*?)[/font]",
re.DEBUG)
at at_beginning
literal 91
literal 102
literal 111
literal 110
literal 116
max_repeat 0 1
subpattern None
literal 61
subpattern 1
in
literal 45
literal 43
max_repeat 1 2
in
range (48, 57)
literal 93
subpattern 2
min_repeat 0 65535
any None
in
literal 47
literal 102
literal 111
literal 110
literal 116
一旦理解了语法,就可以发现错误。在那里,我们可以看到,我忘了逃脱[]
在[/font]
当然,你可以将它与你想要的任何标志结合起来,比如评论的正则表达式:
>>> re.compile("""
^ # start of a line
\[font # the font tag
(?:=(?P<size> # optional [font=+size]
[-+][0-9]{1,2} # size specification
))?
\] # end of tag
(.*?) # text between the tags
\[/font\] # end of the tag
""", re.DEBUG|re.VERBOSE|re.DOTALL)
枚举
用枚举包装一个 iterable,它将产生项目及其索引。
例如:
>>> a = ['a', 'b', 'c', 'd', 'e']
>>> for index, item in enumerate(a): print index, item
...
0 a
1 b
2 c
3 d
4 e
>>>
参考文献: