Імпорт модуль не витрачає нічого ; модуль завжди повністю імпортується (у 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)