Просто так написано в PEP8, скажете вы. Да, это действительно так. Но PEP8 это стилистические рекомендации. Какая практическая польза от такой записи?
Несколько раз мои студенты спрашивали зачем писать длинней когда можно короче? Не это ли один из основных принципов в Python?
Как мы хотим писать:
import os, sys, subprocessКак рекомендуют
import osЕсли "нельзя" писать в одну строку, то зачем добавили такую возможность - перечислять имена импорта?
import sys
import subprocess
Объясняю в два этапа:
🔸Перечисление добавлено для возможности импорта через from, когда из модуля требуется импортнуть несколько имён
from os.path import join, expanduser, sepВ PEP328 добавили возможность перечисление вставлять в скобки чтобы переносить на новую строку без экранирования символа новой строки
Было
from os.path import join, expanduser, \Стало
sep, basename, exists
from os.path import (join, expanduser,🔸 Практическая польза от импортов на разных строках заметна когда вы делаете слияние разных веток кода с конфликтами или просто с изменениями.
sep, basename, exists)
Допустим, есть два варианта кода
# file1.pyЗачем-то нам потребовалось изменить импорт, вместо uuid импортим sys. Что покажет нам diff?
import fnmatch
import time
import json
import uuid
#file2.py
import fnmatch, time, json, uuid
# file1.pyЗаметили разницу? Пусть даже для GIT это совершенно не проблема, кодревью будет происходить удобней с точки зрения человека. Да, это объяснение человека, который сам делает кодревью (и регулярно сам же нарушает эту рекомендацию, о чем потом жалеет 😭)
-import uuid
+import sys
# file2.py
-import fnmatch, time, json, uuid
+import fnmatch, time, json, sys
Есть ли у вас еще доводы в пользу каждого импорта на новой строке?
#tricks #pep