この並列割り当ての仕組みを理解しようとしています。完全なコードはhereです。 (Raw GithubのPythonファイル)。ここで私が問題を抱えているものです:Python並列割り当て
def assign_move(square):
# Parallel Assignment
target, direction = max(
((neighbor, direction) for direction, neighbor in enumerate(game_map.neighbors(square))
if neighbor.owner != myID),
default = (None, None),
key = lambda t: t[0].production)
私は同じくらい私が知っているように、それを打破するだろうが、私はおそらく何か間違ったことをやっています。
target, direction = max(iterable, default, key)
ターゲットと方向を同じものに割り当てていますか?
iterable = ((neighbor, direction) for direction, neighbor in enumerate(game_map.neighbors(square)) if neighbor.owner != myID)
がどのように我々は、forループの前に(neighbor , direction)
を持つことができます:私は、パラレル割り当てが今、私たちはiterable
を見ればx, y = 5, 6
のようなものだと思った、それは次のようですか?ここではif
のステートメントは何をしていますか? neighbor.owner != myID
の場合、ifブロックの下に実行する必要はありませんか?
イテレータが空の場合、次のようにNone, None
が返されます。
default = (None, None),
これは、最大値を決定するために使用する関数です。
key = lambda t: t[0].production)
背景、必要な場合:これは、ゲームHaliteで再生するボットのコードです 。これはGitHub repoの中で見つけられたあらかじめ作成されたボットです。
これは、 'if'文を使った' for'ループではありません。それは[フィルタを使ったリストの理解](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions) – Hamms
ああ完璧!私はその部分を何のために探すべきか分からなかった。 – Loaf
@ハムス:Genexではなく、LC。角かっこはありません。 –