有趣的Python习惯用法,用于删除单个条目列表中的唯一项
今天偶然发现了这个,认为它可能值得讨论 Python的习惯用法 列表中的项目 有时在代码中会发生 有一个列表,我们称之为有趣的Python习惯用法,用于删除单个条目列表中的唯一项,python,Python,今天偶然发现了这个,认为它可能值得讨论 Python的习惯用法 列表中的项目 有时在代码中会发生 有一个列表,我们称之为东西,然后 我确信这份名单 只包含一项。我想要 获取此项目并将其放入 变量,叫它东西。有什么问题 最好的方法是什么?过去我 用于执行此操作: thing = stuff[0] 但我认为这不是最好的成语。我上来了 有一个更好的: (thing,) = stuff 为什么这个更好 可读性:让读者知道 那东西只有一个元素 自由断言:它使Python断言 那东西只有一个元素,所以
东西
,然后
我确信这份名单
只包含一项。我想要
获取此项目并将其放入
变量,叫它东西。有什么问题
最好的方法是什么?过去我
用于执行此操作:
thing = stuff[0]
但我认为这不是最好的成语。我上来了
有一个更好的:
(thing,) = stuff
为什么这个更好
可读性:让读者知道
那东西只有一个元素
自由断言:它使Python断言
那东西只有一个元素,所以
如果我的原稿错了
假设stuff
正好有一个
元素,Python会对我大喊大叫
在这表现为
在世界其他地方很难找到虫子
节目
很难错过:上一个
方法的末尾有一个[0]
。现在,
这很容易在一行中被注意到
缩写为thing=stuff[0]
。但是如果
这条线有点乱,就像
这:
在这种情况下,末尾的[0]是
很容易错过,因为当不经意间
浏览一下代码,可能会发现
连接到该函数调用或
dict查找。所以读者可能会错过
事实上我们要把一件东西拿出来
这里有一个列表。这样会更好
在这种情况下:
(thing,) = some_dict[my_object.get_foobar_handler()]
适用于任何“收藏”的常规
Ulrik注意到这一点):这种方法
即使东西是一套或任何一套,也能工作
其他类型的收藏<代码>素材[0]
不会在电视机上工作,因为电视机
不支持按索引访问
号码。玩得开心
()
总的来说,我对这个想法感到困惑。他用自由断言和更高的可读性(如果它成为一种模式)提出了一个令人信服的论点。另一方面,在它流行之前,阅读起来有点困难
社区是怎么想的?博客海报希望一条语句可以起到以下作用:(1)从列表中提取一个项目,(2)断言,(3)作为一条注释,告诉用户列表中只有一个项目 我非常喜欢最小化代码行数,但我非常喜欢以下内容:
assert len(stuff) == 1, "stuff should have length 1 but has length %d" % len(stuff)
thing = stuff[0]
显式比隐式好。我更喜欢:
[thing] = stuff
如果只是因为我觉得
(东西,)
很丑就好了。但我总的来说喜欢这个概念。一个人很可能会忽略逗号本身,我宁愿把东西索引起来,而不是放在括号里(还有那个逗号)
我想我现在已经习惯于写
thing=stuff[0]
了,但并不意味着优点或其他,我只是想说,如果没有大括号,这也是可能的:thing,=stuff
@Matth:但是后面的逗号(没有括号)也很容易被忽略。+1:断言通常是必要的。出人意料的经常。你可能认为你知道它有一个元素。但你在其他地方遇到了问题。
[thing] = stuff