Python编程语言中有哪些鲜为人知但很有用的特性?

尽量将答案限制在Python核心。 每个回答一个特征。 给出一个例子和功能的简短描述,而不仅仅是文档链接。 使用标题作为第一行标记该特性。

快速链接到答案:

参数解包 牙套 链接比较运算符 修饰符 可变默认参数的陷阱/危险 描述符 字典默认的.get值 所以测试 省略切片语法 枚举 其他/ 函数作为iter()参数 生成器表达式 导入该 就地值交换 步进列表 __missing__物品 多行正则表达式 命名字符串格式化 嵌套的列表/生成器推导 运行时的新类型 .pth文件 ROT13编码 正则表达式调试 发送到发电机 交互式解释器中的制表符补全 三元表达式 试着/ / else除外 拆包+打印()函数 与声明


当前回答

曾经使用xrange(INT)而不是range(INT) ....它占用的内存更少,而且不依赖于整数的大小。容量! !这不是很好吗?

其他回答

乘以布尔值

我在web开发中经常做的一件事是可选地打印HTML参数。我们在其他语言中都见过这样的代码:

class='<% isSelected ? "selected" : "" %>'

在Python中,你可以乘以一个布尔值,它就会像你期望的那样:

class='<% "selected" * isSelected %>'

这是因为乘法将布尔值强制转换为整数(0表示False, 1表示True),在python中,将字符串乘以int将重复该字符串N次。

一个词:IPython

标签内省,漂亮的打印,%调试,历史管理,pylab,…值得花时间好好学习。

在运行时更改函数标签:

>>> class foo:
...   def normal_call(self): print "normal_call"
...   def call(self): 
...     print "first_call"
...     self.call = self.normal_call

>>> y = foo()
>>> y.call()
first_call
>>> y.call()
normal_call
>>> y.call()
normal_call
...

迭代工具

这个模块经常被忽视。下面的例子使用itertools.chain() 扁平化列表:

>>> from itertools import *
>>> l = [[1, 2], [3, 4]]
>>> list(chain(*l))
[1, 2, 3, 4]

更多应用请参见http://docs.python.org/library/itertools.html#recipes。

原始字符串中的反斜杠仍然可以转义引号。看到这个:

>>> print repr(r"aaa\"bbb")
'aaa\\"bbb'

注意,反斜杠和双引号都出现在最后的字符串中。

因此,你不能用反斜杠来结束一个原始字符串:

>>> print repr(r"C:\")
SyntaxError: EOL while scanning string literal
>>> print repr(r"C:\"")
'C:\\"'

这是因为实现原始字符串是为了帮助编写正则表达式,而不是为了编写Windows路径。在Gotcha - Windows文件名中的反斜杠上阅读关于这个的长讨论。