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

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

快速链接到答案:

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


当前回答

从python 3.1(2.7)开始,支持字典和集推导式:

{ a:a for a in range(10) }
{ a for a in range(10) }

其他回答

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

对迭代器的多个引用

你可以使用列表乘法创建对同一个迭代器的多个引用:

>>> i = (1,2,3,4,5,6,7,8,9,10) # or any iterable object
>>> iterators = [iter(i)] * 2
>>> iterators[0].next()
1
>>> iterators[1].next()
2
>>> iterators[0].next()
3

这可以用来将一个可迭代对象分组成块,例如,就像这个来自itertools文档的例子

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

一个词:IPython

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

牙套

def g():
    print 'hi!'

def f(): (
    g()
)

>>> f()
hi!

将元组传递给内置函数

很多Python函数接受元组,但看起来并不像。例如,你想测试你的变量是否是一个数字,你可以这样做:

if isinstance (number, float) or isinstance (number, int):  
   print "yaay"

但如果你传递给我们元组,这看起来更干净:

if isinstance (number, (float, int)):  
   print "yaay"