2015-01-14 1 views
1

Так что я пишу небольшую программу на Python. Это не будет очень требовательным и забавным, поэтому не обязательно нужно оптимизировать скорость или ресурсы или что-то в этом роде, и я далек от профессионалов, поэтому, если это смешной вопрос, извините, НО мне интересно:Преимущество импорта библиотек внутри функции?

Я определяю несколько небольших функций (например, 5 строк), которые потребуют импортировать библиотеки (urllib, xml.etree и т. Д.). Есть ли причина делать их вне функции, как в начале моего кода, а не как первые строки функции? Я бы подумал, что использование этой функции облегчит кражу этих функций в будущем, но я также думал, что это немного замедляет работу. Есть ли какое-нибудь жесткое правило или правило? А если нет, есть ли у кого-нибудь мнения?

ответ

7

Фактически, импорт модулей локально внутри функции повысит эффективность (слегка). Поиск локальных имен всегда быстрее, чем поиск глобальных символов, потому что глобальное пространство имен является одним из последних, которое Python проверяет при поиске имени.

То есть, я бы не рекомендовал делать это по трем причинам:

  1. Он растрачивает строк кода. Каждая функция, которая нуждается в определенном модуле, должна будет импортировать ее. Это означает, что у вас будет много повторяющихся операторов импорта.

  2. Это затрудняет поиск зависимостей вашего кода. Одной из основных причин, которую вы импортируете в верхней части файла, является то, что импорт легко просматривается.

  3. Это идет вразрез с PEP 0008, который специально говорит:

    Импорт всегда помещается в верхней части файла, сразу после любого модуля комментариев и строку документации, и до того модуля глобал и констант.

+0

awesome, спасибо! – kmdewey