Александр Мюнц

День добрый, долго пытался понять, что линтеру не нравится в этой строке:

(x1, y1), (x2, y2) = pair

В итоге получилось убрать предупреждение, записав таким образом:

x1, y1 = pair[0]
x2, y2 = pair[1]

Почему линтер ругается на подобную деструктуризация кортежа в кортеже?

2 0

Глубокая деструктуризация может быть сложной в отладке, если вдруг придут данные "не той" структуры. И пусть в данном случае трудно ошибиться, но в реальных проектах такое встречается, увы.

Линтер, который мы используем, довольно строг в тех случаях, когда лучше побольше написать, но поиметь меньше проблем в будущем. Вот и в данном случае он ругается заранее.

Вы можете сделать одно из двух:

  1. Вы можете заглушить ошибку в конкретном месте с помощью соответствующего комментария:

    код  # noqa: КОД_ОШИБКИ
    

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

  2. Можете последовать совету линтера и разбить деструктуризацию на три:

    point1, point2 = pair
    x1, y1 = point1
    x2, y2 = point2
    

    (Использования индексов при работе с кортежами стоит избегать, лучше по возможности всегда стараться деструктурировать).

0

Aleksei Pirogov, благодарю за подробный ответ, теперь понятно.

0
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →