Импорт модуль не тратит ничего ; модуль всегда полностью импортируется (в sys.modulesотображение), поэтому вы не используете его import sysили from sys import argvне делаете разногласий.
Единственная разница между этими двумя утверждениями заключается в том, какое имя связано; import sysпривязывает имя sysк модулю (так sys-> sys.modules['sys']), в то время как from sys import argvсвязывает другое имя argv, указывая прямо на атрибут, содержащийся внутри модуля (так argv-> sys.modules['sys'].argv). Остальная часть sysмодуля все еще там, используете ли вы что-нибудь еще из модуля или нет.
Также нет разницы в производительности между этими двумя подходами. Да, sys.argvдолжен искать две вещи; он должен искать sysв вашем глобальном пространстве имен (находит модуль), а затем искать атрибут argv. И да, используя его, from sys import argvвы можете пропустить поиск атрибута, поскольку у вас уже есть прямая ссылка на атрибут. Но importоператор все еще должен выполнять эту работу, он ищет тот же атрибут при импорте, и вам нужно будет использовать его argv только один раз . Если бы вам пришлось использовать argvтысячи раз в цикле, это могло бы иметь значение, но в данном конкретном случае это действительно не так.
Выбор между тем или другим должен основываться на стиле кодирования .
В большом модуле я бы обязательно использовал import sys; Документация по коду имеет значение, и использование sys.argvгде-то в большом модуле делает намного более понятным то, на что вы ссылаетесь, чем argvкогда-либо.
Если единственное место, которое вы используете, argvнаходится в '__main__'блоке для вызова main()функции, во что from sys import argvбы то ни стало используйте, если вы чувствуете себя счастливее по этому поводу:
if __name__ == '__main__':
from sys import argv
main(argv)
Я бы все еще использовал import sysтам сам. При прочих равных условиях (и они, в точности, с точки зрения производительности и количества символов, использованных для его написания), для меня это просто на глаз.
Если вы импортируете что - то другое , то, возможно, производительность вступит в игру. Но только если вы используете определенное имя в модуле много раз , например в критическом цикле. Но тогда создание локального имени (внутри функции) будет еще быстрее:
import somemodule
def somefunction():
localname = somemodule.somefunctionorother
while test:
# huge, critical loop
foo = localname(bar)