我正在阅读一段我需要了解的python代码,以便在PHP中移植它。我可以理解基本的python语法。但是我遇到了以下一段代码,我并没有真正理解它。
player = next((p for p in player_list if p['team'] == team), None)
如同,它是否正在执行以下操作:
if p['team'] == team
for p in player_list
next
在这里做了什么:(我只需要理解上面语句的语法/语法,这样我就可以在PHP中编写等效语句。我无法弄明白,因为PHP不支持这样的结构。任何帮助表示赞赏
答案 0 :(得分:2)
这是带有条件的生成器表达式。 p for p in player_list
遍历player_list
中的所有值并生成它们,但只生成if p['team'] == team
。 next
推进迭代器并获取其下一个值。通常,如果迭代器到达其末尾[没有找到值],则会以StopIteration
异常结束,而第二个None
参数会阻止该异常; next
将返回None
而非提出异常。
简而言之:此代码段会找到player_list
中第一个属于团队team
的玩家,如果没有,则会None
分配给player
。在PHP中,最接近的等价物是:
$player = array_reduce($playerList, function ($a, $p) use ($team) {
return $a ?: $p['team'] == $team ? $p : null;
});
或:
$player = array_filter($playerList, function ($p) use ($team) {
return $p['team'] == $team;
})[0] ?? null;
虽然注意事项既不像next
那样短路,但两种变化都会迭代整个数组。因此,您可能会使用foreach
循环来代替if
和break
。