2017-05-14 61 views
0

我不是一个有经验的Python程序员,我看到下面的代码,我不明白。不幸的是,语法非常棘手,难以在互联网上搜索。虽然我确实发现了一些解释,“_”和“__”,但我不知道,如果下面的代码有什么特殊的含义为“_”Python _意思是什么时候分配循环

if not allowed_positions: 
    return (0, 0) 
_, point = max([(self.point(graph.find_point(p), self), p) for p in allowed_positions]) 

在上面的代码,我不明白为什么有一个在点= ...之前用逗号“ - ”加下划线。

+3

虽然我对你的标题感到困惑,因为在这段代码中没有for循环。 –

+0

@AdamSmith有一个for循环 - >“for allowed_positions”,它创建一个数组,然后max函数从这个数组中找到最大值。但是让我感到困惑的是“_”,在此之前。我是这样的语法几次与循环。 – DevBoy

+0

@DevBoy这就是所谓的列表理解。这是一个完全不同的语法结构。 '[iterable中的item的表达式]' –

回答

5

_仅用作废弃变量的占位符。 我们假设有一个函数返回一个带有两个元素的元组,并且我只对元组的第二部分感兴趣,那么通常使用_作为我不需要的变量。 例如

>>> def return_tuple(): 
...  return (24,7) 
... 
>>> _, days = return_tuple() 
>>> days 
7 
+0

编辑后不久(编辑器中未显示),我的编辑会杀死您的修改。如果您对帖子的当前状态不满意,请随时恢复您的原始答案(我认为这很好)。 – timgeb

+0

@timgeb完成。谢谢。 – DhruvPathak

+0

感谢@DhruvPathak,简要而明确的解释。 – DevBoy

1

_是,你不需要将数据存储在变量的占位符。

你可以用它来tuple unpacking,它是常见的做法是使用下划线来表示该值将不稍后在脚本中使用。

如果你有这样的事情:soldiers = [('Steve', 'Miller'), ('Stacy', 'Markov'), ('Sonya', 'Matthews'), ('Sally', 'Mako')]

和,你想要得到的只有你这样做的姓氏:

for _, last_name in soldiers: 
    # print the second element 
    print(last_name) 

而不是做:

for first_name, last_name in soldiers: 
    print(last_name 

由于您不需要使用first_name。你用_代替它,所以你不存储不必要的变量

+0

感谢@GarrettKadillak的解释。它有帮助。 – DevBoy