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

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

快速链接到答案:

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


当前回答

脚本的交互式调试(和doctest字符串)

我不认为这是广为人知的,但添加这一行到任何python脚本:

进口pdb;pdb.set_trace ()

将导致PDB调试器在代码的那一点弹出运行游标。我想,更鲜为人知的是,你可以在doctest中使用同样的行:

"""
>>> 1 in (1,2,3)   
Becomes
>>> import pdb; pdb.set_trace(); 1 in (1,2,3)
"""

然后可以使用调试器检出doctest环境。您不能真正逐级执行doctest,因为每一行都是自主运行的,但它是调试doctest glob和环境的好工具。

其他回答

将字符串相乘以使其重复

print "SO"*5 

给了

SOSOSOSOSO

python成语x =…如果……其他的……远优于x =…和…还是……原因如下:

尽管声明

x = 3 if (y == 1) else 2

等于

x = y == 1 and 3 or 2

如果使用x =…和…还是……成语,有一天你可能会被这种棘手的情况所困扰:

x = 0 if True else 1    # sets x equal to 0

因此不等于

x = True and 0 or 1   # sets x equal to 1

要了解更多正确的方法, 参见Python的隐藏特性。

如果你在你的应用程序中重命名了一个类,你正在通过Pickle加载用户保存的文件,而其中一个重命名的类存储在用户的旧保存中,你将不能加载这个Pickle文件。

然而,只要在你的类定义中添加一个引用,一切就好了:

例如,:

class Bleh:
    pass

现在,

class Blah:
    pass

所以,你的用户的pickle保存的文件包含一个Bleh的引用,它不存在,由于重命名。这是固定的吗?

Bleh = Blah

简单!

你可以通过查看对象的__ module__属性来询问它来自哪个模块。这很有用,例如,如果您正在命令行上进行实验,并且导入了很多东西。

同样,你可以通过查看模块的__ file__属性来询问它来自哪里。这在调试路径问题时很有用。

如果你不喜欢使用空格来表示作用域,你可以通过发出以下命令来使用c风格{}:

from __future__ import braces