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

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

快速链接到答案:

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


当前回答

上下文管理器和“with”语句

在PEP 343中引入的上下文管理器是作为一组语句的运行时上下文的对象。

由于该特性使用了新的关键字,它是逐渐引入的:在Python 2.5中通过__future__指令可用。Python 2.6及以上版本(包括Python 3)默认情况下可用。

我经常使用“with”语句,因为我认为这是一个非常有用的结构,下面是一个快速演示:

from __future__ import with_statement

with open('foo.txt', 'w') as f:
    f.write('hello!')

这里在幕后发生的事情是,“with”语句在文件对象上调用特殊的__enter__和__exit__方法。如果with语句体引发任何异常,异常细节也会传递给__exit__,允许在那里进行异常处理。

在这种特殊情况下,这为您做的是,当执行超出with套件的范围时,它保证关闭文件,无论这是正常发生还是抛出异常。它基本上是一种抽象出常见异常处理代码的方法。

其他常见的用例包括线程锁定和数据库事务。

其他回答

Python解释器

>>> 

也许不是不太为人所知,但肯定是我最喜欢的Python特性之一。

简单:

>>> 'str' in 'string'
True
>>> 'no' in 'yes'
False
>>> 

这是我喜欢Python的地方,我看到过很多不太像Python的习语:

if 'yes'.find("no") == -1:
    pass

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

Pow()也可以有效地计算(x ** y) % z。

内置pow()函数有一个鲜为人知的第三个参数,它允许你比简单地(x ** y) % z更有效地计算xy对z的模量:

>>> x, y, z = 1234567890, 2345678901, 17
>>> pow(x, y, z)            # almost instantaneous
6

相比之下,对于相同的值,(x ** y) % z在我的机器上一分钟内没有给出结果。

牙套

def g():
    print 'hi!'

def f(): (
    g()
)

>>> f()
hi!