Импорт в Python: Некоторые вопросы

#python #import

Вопрос:

Я новичок, поэтому прошу прощения за этот вопрос.

При импорте в Python, если я это сделаю from star import triangle , импортирую ли я весь звездный модуль или только функцию треугольника внутри звездного модуля?

Например, когда я запускаю свой скрипт, что делает python, когда он смотрит на эту строку?

Кроме того, что происходит, когда кто-то это делает from . import square ?

Мне кажется, я тоже видел, как кто-то использовал from ... import square . Это еще что такое?

Ответ №1:

В порядке вопроса :

  • Вы импортируете только объект треугольника (функцию, класс…) из своего модуля star
  • Python запускает определение, проверяя, нет ли «типографской» ошибки (это не означает, что позже не будет ошибки во время выполнения, поскольку язык сценариев настолько универсален, что невозможно предсказать достоверность определенного контекста на ранней стадии, как в скомпилированном языке) Если это сделано без проблем, то у вас есть объект «треугольник», содержащий ваше определение. Точно так же, делая triangle = 2, у вас есть объект, содержащий экземпляр int со значением 2. В python все является объектом с методами и свойствами. Вы всегда можете проверить методы выполнения объекта
     dir(triangle) 
     

    например.
    Делая dir(треугольник) с треугольником, являющимся int, мы видим, что существует метод .real и другие.
    Выполняя dir(треугольник), вы увидите методы, которые реализует ваша функция класса. (метод, заключенный в __подчеркивания__, является методами по умолчанию, созданными без необходимости их объявления. Они могут быть перегружены в любом случае, если вы захотите.

  • От. импорт x означает, что он импортирует модуль после ключевого слова «импорт», выполняя поиск в родительском каталоге (один каталог выше того, в котором в данный момент выполняется ваш файл, с различиями, находитесь ли вы в своем «основном» или в импортируемом модуле)

Комментарии:

1. Работает ли код быстрее, когда вы импортируете меньше материала? Например, если я импортирую 100 модулей, но на самом деле не использую 90 из них, будет ли мой код работать быстрее, если я не импортирую эти 90? Или на скорость это не так сильно влияет?

2. Да, но только потому, что проверка была выполнена только на 10 из них при импорте вместо полных 100. Затем, независимо от того, импортировали ли вы 10 или 100, скорость выполнения не изменится, если в любом случае вы используете только 10. Но это будет стоить вам места в оперативной памяти, так как определение объекта хранится там, как и любая другая переменная. Точно так же, если вы когда-либо экспортируете свой код в виде отдельного файла, который можно выполнить с помощью pyinstaller, увеличение объема импорта означает увеличение объема файла.

3. Ах, это влияет на объем оперативной памяти. Итак, если я правильно вас понимаю, преимущество from star import triangle в том, что это будет стоить мне меньше места в оперативной памяти и приведет к исполняемому файлу меньшего размера, чем import star . Тебе это кажется правильным?

4. Точно. И у вас меньше «времени загрузки» в начале fisrt вашего кода (например, это будет пользовательский интерфейс), поскольку импорт выполняется только для части выбранного модуля. Следовательно, быстрее, например, для больших модулей, таких как numpy.