Попытка выяснить, как работает это параллельное назначение. Полный код может быть найден here. (Файл Ryth 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)
Назначаем ли мы цель и направление к тому же? Я думал, что параллельное назначение было что-то вроде x, y = 5, 6
Теперь, если мы посмотрим на iterable
, это следующее:
iterable = ((neighbor, direction) for direction, neighbor in enumerate(game_map.neighbors(square)) if neighbor.owner != myID)
Как мы можем иметь (neighbor , direction)
перед для цикла? Что здесь делает инструкция if
? Не нужно ли что-нибудь ниже блока if для запуска, если neighbor.owner != myID
?
Если итератор пуст, мы вернем None, None
, как показано ниже?
default = (None, None),
И это функция, которую мы используем для определения максимальной?
key = lambda t: t[0].production)
фона, если это необходимо: Это код бот будет играть в игру Halite. Это готовый бот, найденный в этом GitHub repo.
Это не цикл 'for' с выражением' if'; это [понимание списка с фильтром] (https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions) – Hamms
Ahh perfect! Я понятия не имел, что даже искать для этой части. – Loaf
@ Хаммс: Genex, а не LC. Нет квадратных скобок. –