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
Также количество элементов с правой стороны должно быть одинаковым для левой стороны, иначе будет сгенерировано исключение