Python的隐藏功能
Python编程语言的鲜为人知的但有用的功能是什么?
快速链接到答案:
.get
值 import this
__missing__
项 .pth
文件 try/except/else
print()
功能 with
声明 链接比较操作符:
>>> 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)
枚举
用enumerate包装一个迭代器,它将产生该项目及其索引。
例如:
>>> 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
>>>
参考文献:
enumerate