我是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
。那是解决方案吗?
答案 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 comprehension和enumerate
一种让人想起Perl的undef
的方法是使用_
作为一次性变量,但正如评论中所述,这与可能正在使用_
的国际化相冲突。请参阅answers in this post。