@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 просмотров
Решения вопроса 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 будет использоваться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 12:53
25000 руб./за проект
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект