Python: назначение левой скобки

Итак, я нашел этот код внутри Котти:

[child] = filter(lambda ch: ch.name == path[0], self._children)

И мне было интересно: что делают левые квадратные скобки? Я провел некоторое тестирование в оболочке Python, но я не могу понять цель этого. Бонусный вопрос: что означает lambda вернуть? Я бы угадал кортеж (Boolean, self._children), но это, вероятно, неправильно...

2 ответа

Решение

Это распаковка списка, списка только с одним элементом. Эквивалент будет:

child = filter(lambda ch: ch.name == path[0], self._children)[0]

(Исключение будет, если более одного элемента self._children удовлетворяет условию - в этом случае код Котти выдаст ошибку (слишком много значений для распаковки), в то время как приведенный выше код будет использовать первое в списке).

Также: lambda ch: ch.name == path[0] либо возвращает True или же False,

[child] = filter(lambda ch: ch.name == path[0], self._children)

Это устанавливает дочерний элемент к первому элементу результата. Это синтаксический сахар для списка [0] = ...[0]. Это также может быть два элемента, как [a, b] = [10, 20], который является сахаром для a = 10; b = 20

Также количество элементов с правой стороны должно быть одинаковым для левой стороны, иначе будет сгенерировано исключение

Другие вопросы по тегам