Python _ meaning when assigned after for loop
我不是一个有经验的Python程序员,我看到了以下我无法理解的代码。不幸的是,语法非常复杂,很难在互联网上搜索到。虽然我确实找到了一些关于"和"的解释,但我不确定下面的代码是否对"有特殊意义"。
1 2 3
| if not allowed_positions:
return (0, 0)
_, point = max([(self.point(graph.find_point(p), self), p) for p in allowed_positions]) |
在上面的代码中,我不明白为什么在点= ...之前有一个带逗号'-,'的下划线。
- 不过,我对您的标题感到困惑,因为这段代码中没有for循环。
- @adamsmith有一个for循环->"for p in allowed_positions",它创建一个数组,然后max函数从这个数组中找到max值。但令我困惑的是"_uu",在这一点之前。我在这个语法中用了几次循环。
- @Devboy,这叫做列表理解。这是一个完全不同的句法结构。[expression for item in iterable]。
- @从题目开始,我就期待着一个问题:for _ in range(5): do_something()或acc = 0; for _ in some_list: acc += 1等。
_仅用作丢弃变量的占位符。假设有一个函数返回一个有两个元素的元组,我只对该元组的第二部分感兴趣,那么对我不需要的变量使用_是一种常规做法。例如
1 2 3 4 5 6
| >>> def return_tuple():
... return (24,7)
...
>>> _, days = return_tuple()
>>> days
7 |
- 在您的编辑(历史记录中没有显示)后不久,我的编辑取消了您的修改。如果你对帖子的当前状态不满意,可以恢复原来的答案(我认为没问题)。
- @Timgeb完成了。谢谢。
- 感谢@dhruvpathak提供简短而清晰的解释。
- 可能值得明确补充的是,_对语言没有特殊意义,它只被约定使用(不像haskell和go这样的一些语言,_是一种抛弃结果的语言构造)。
- @adamsmith:在Python提示_中存储上次执行的未分配操作结果。例如:执行max(range(10))_后,将名称赋给值9。
- @Azatibrakov是交互式repl的一个特性,而不是语言。虽然我忘记了事实!:)不管这里问的不是什么,是吗?
_是不需要存储数据的变量的占位符。
您可以将它用于元组解包,并且通常实践中使用下划线来表示该值在脚本的后面不会被使用。
如果你有这样的东西:soldiers = [('Steve', 'Miller'), ('Stacy', 'Markov'), ('Sonya', 'Matthews'), ('Sally', 'Mako')]
。
而且,你只想得到姓氏,你可以这样做:
1 2 3
| for _, last_name in soldiers:
# print the second element
print(last_name) |
号
而不是:
1 2
| for first_name, last_name in soldiers:
print(last_name |
因为你不需要使用first_name。用_替换它,这样就不会存储不必要的变量。
- 感谢@garrettkadillak的解释。它起了作用。