今天偶然发现,认为它可能值得讨论。有趣的Python成语,用于删除单个条目列表中的唯一项目
Python的成语采取单 项目从列表中
有时会发生在代码中,我 有一个列表,让我们称之为
stuff
,并 我肯定知道这个名单 正好包含一个项目。我想 得到这个项目,并把它放在一个 变量,称之为事情。什么是 这样做的最好方法?在过去,我 用来做这个:thing = stuff[0]
但我认为这不是最好的成语。我想出了一个更好的 :
(thing,) = stuff
为什么这一个更好?
可读性:它让读者知道 东西只有一个元素。
免费断言:它使Python的断言 是
stuff
有且只有一个元素,所以 ,如果我错了,我原来 假设stuff
有且只有一个 元素,Python会在我喊 在此之前表现作为 难以发现的错误 程序中的其他地方。不容错过:之前的 方法最后有
[0]
。现在, 很容易注意到一行 简称thing = stuff[0]
。但是,如果 线是东西凌乱像 这样:thing = some_dict[my_object.get_foobar_handler()][0]
在这种情况下,[0]到底是 容易错过,因为当随便 一眼代码,它似乎 连接到该函数调用或 字典查找。所以读者可能会错过 这个事实,我们在这里列出一个列表项目列表 。这将是在这种情况下更好 :
(thing,) = some_dict[my_object.get_foobar_handler()]
一般用于任何“收藏”(道具 Ulrik合作的指出这一点):此方法 工作,即使东西是一组或任何 其他种类的采集。
stuff[0]
不能在一组上工作,因为组 不支持通过索引 号码访问。玩得开心编程!
(http://blog.garlicsim.org/post/1198230058/python-idiom-for-taking-the-single-item-from-a-list)
在一般情况下,我已经撕破的想法。他对自由断言和可读性提出了令人信服的论点(如果它成为一种模式)。另一方面,直到/如果它变得流行,它有点难以阅读。
社区有什么想法?
没有暗示优点或以其他方式,只是想我会提到这一点,也可以不带括号:'事,= stuff'。 – MattH 2010-09-28 12:57:53
@Matth:但是最后的逗号(无parens)也很容易忽略。 – delnan 2010-09-28 13:41:33