如何在分配显式变量时忽略某些元组成员?

时间:2017-04-13 21:26:20

标签: python python-2.7 perl

我是Perl家伙,目前正在学习Python。如果我在Perl中有一个列表,我可以将它的值(成员)分配给显式变量,如:

my ($a, $b, $c) = ('one', 'two', 'three');

现在$a == 'one'$b == 'two'$c == 'three'。与Python非常相似。

如果我对...不感兴趣第二个成员,我可以用Perl写这个:

my ($a, undef, $c) = ('one', 'two', 'three');

现在$a == 'one'$c == 'three'。没有$b。 Perl简单地丢弃了'two'。这样可以避免发明无用的变量(在这种情况下为$b)并污染命名空间,我很欣赏。

Python中有类似的习惯用法吗?

toople = (1, 2, 3)
a, None, c = toople

SyntaxError: cannot assign to None这对我来说听起来很合理。

有没有办法避免Python中的(无用)变量b

除了命名空间污染之外,我还有另一个问题:可读性和可维护性。定义b时,潜在的维护者必须搜索使用b的地方(如果有的话)。一种解决方案是命名约定,如_unused_b。那是解决方案吗?

1 个答案:

答案 0 :(得分:2)

由于您按位置选择要么采取特定元素

a, c = [ toople[i] for i in [0,2] ]

或排除其他人

a, c = [ item for i, item in enumerate(toople) if i not in [1] ] 

这些使用list comprehensionenumerate

一种让人想起Perl的undef的方法是使用_作为一次性变量,但正如评论中所述,这与可能正在使用_的国际化相冲突。请参阅answers in this post