我是一名 Perl 人员,目前正在学习 Python。如果我有 Perl 中的列表,我可以将其值(成员)分配给显式变量,如下所示:
my ($a, $b, $c) = ('one', 'two', 'three');
现在$a == '一'
,$b == '二'
,$c == '三'
。与 Python 非常相似。
如果我对例如不感兴趣第二个成员,我可以用 Perl 编写:
my ($a, undef, $c) = ('one', 'two', 'three');
现在$a == 'one'
,并且$c == ' Three'
。没有$b
。 'two'
被 Perl 简单地丢弃。这避免了发明无用的变量(在本例中是$b
)和污染命名空间,我很欣赏这一点。
Python中有类似的习惯用法吗?
toople = (1, 2, 3)
a, None, c = toople
给出SyntaxError:无法分配给None
,这对我来说听起来很合理。
有没有办法避免Python中的(无用的)变量b
?
除了命名空间污染之外,我还关心另一个问题:可读性和可维护性。当定义 b
时,潜在的维护者必须搜索使用 b
的位置(如果有的话)。一种解决方案是命名约定,例如 _unused_b
。这是解决方案吗?
最佳答案
由于您按位置选择,因此要么采用特定元素
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 .
关于python - 分配给显式变量时如何忽略某些元组成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43401974/