Коли вигідно використовувати вбудований одноразовий імпорт у Python?
Наприклад:
__import__("x").doSomething()
Чи вищезазначене коли-небудь коротше, ніж нижче?
import x
x.doSomething()
Або
from x import*
doSomething()
Коли вигідно використовувати вбудований одноразовий імпорт у Python?
Наприклад:
__import__("x").doSomething()
Чи вищезазначене коли-небудь коротше, ніж нижче?
import x
x.doSomething()
Або
from x import*
doSomething()
Відповіді:
Це може бути корисно, якщо ви хочете один раз використовувати модуль у функції анонімної лямбда, оскільки це дозволяє уникнути написання окремої заяви:
lambda x:__import__('SomeModule').foo(x,123)
на один байт коротше, ніж
from SomeModule import*;f=lambda x:foo(x,123)
Якщо код є іменованою функцією або програмою, __import__навряд чи це допоможе, за винятком самих крайніх або надуманих обставин.
importйого називатимуть всередині відступного блоку? Напевно, ні.
f=оскільки анонімні функції дозволені і можуть містити вміст поза функцією .
При імпорті декількох модулів з досить довгими іменами може бути корисно призначити __import__ функцію коротшій змінній та використовувати її для імпорту
Звіт про регулярне імпортування - 97 байт
з імпорту itertools *
з імпорту дати *
список друку (перестановки ("abc"))
друкувати datetime.now ()
Призначення __import__до i- 94 байт:
i = __ import__
список друку (i ("itertools"). перестановки ("abc"))
print i ("datetime"). datetime.now ()
__import__("x").doSomething()потрібно 15+ x символів для позначення модуля з назвою довжини x .
import x\nx.doSomething()потрібно 9 + 2 * х символів. Ці функції перекриваються при x = 6, тому порівняно з цим будь-який модуль з довшою назвою краще використовувати __import__, чим коротші вигоди від звичайного імпорту:

Однак from x import*\ndoSomething()потрібно лише 14+ x символів, тому порівняно зі звичайним імпортом не варто, якщо назва модуля не перевищує 5 символів:

Все це передбачає, що ви посилаєтесь на функцію / клас / будь-яку лише один раз. Якщо ви посилаєтесь на нього не раз, формули змінюються, і остання версія може стати переможцем. Якщо ви використовуєте щось імпортоване з імпортного модуля кілька разів, виграє ще одна версія:
from x import y as zдає вам 18+ x + y + z * ( n +1) символів для n використання z , що є великим поліпшенням, якщо y є великим, тому що z може бути зроблено 1.
__import__("x").doSomething()на один шар коротша, ніж from x import*;doSomething(). Може бути, ви рахуєте новий рядок як два знаки? І я пригадую, що точка беззбитковості була 5, що потрапляє між timeі random.
z=__import__("x").y- байт коротший ніжfrom x import y as z
from x import*;z=y.
__import__допоможе всередині іменованої функції, оскільки вона буде знаходитись всередині відрізного блоку. Імпорт коштуватиме додатково, оскільки він складається з двох рядків і з відступом. (Це припустимо, що імпорт заборонений поза функцією.)