Задать вопрос
@YuriyCherniy

Объясните замечание ментора, куда копать?

Есть класс, методы которого возвращают ряды и колонки матрицы из строк вида: "1 2 3\n4 5 6\n7 8 9\n8 7 6"
spoiler
class Matrix:
    def __init__(self, matrix_string):
        matrix = []
        matrix_string = matrix_string.split('\n')
        [matrix.append(i.split(' ')) for i in matrix_string]
        self.matrix = [list(map(int, i)) for i in matrix]

    def row(self, index):
        return self.matrix[index - 1]

    def column(self, index):
        return [i[index - 1] for i in self.matrix]

Есть замечание ментора:
I have an issue with line 5, though: you shouldn't use list comprehensions with side effects! Nested LCs have their own problems, but in this case it should be OK.

О каких побочных эффектах в генераторах списков говорит ментор? Ментора спросить не могу, их на обучающем ресурсе всего 92 человека на 45000 таких как я. За бесплатно спасибо ему и на том.
  • Вопрос задан
  • 145 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Включения не должны иметь побочных эффектов. В частности нельзя изменять состояние объектов и переменных. А у вас в строке
[matrix.append(i.split(' ')) for i in matrix_string]
происходит изменение списка matrix.
Ответ написан
Комментировать
@dmtrrr
Backend developer

In [1]: l = []

In [2]: [l.append(i) for i in range(1, 10)]
Out[2]: [None, None, None, None, None, None, None, None, None]

In [3]: l
Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Это строчка мешает чтению кода, обычно ожидается, что результат list comprehension будет использоваться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы