Może to być przydatne, jeśli chcesz użyć modułu tylko raz w anonimowej funkcji lambda, ponieważ pozwala uniknąć pisania osobnej instrukcji:
lambda x:__import__('SomeModule').foo(x,123)
jest o jeden bajt krótszy niż
from SomeModule import*;f=lambda x:foo(x,123)
Jeśli kod jest nazwaną funkcją lub programem, __import__jest mało prawdopodobne, aby był pomocny, z wyjątkiem najbardziej ekstremalnych lub wymyślonych okoliczności.
__import__pomógłby wewnątrz nazwanej funkcji, ponieważ byłaby wewnątrz wciętego bloku. Import będzie kosztował więcej, ponieważ jest w dwóch liniach i wcięty. (Zakłada się, że importowanie nie jest dozwolone poza funkcją.)
Podczas importowania wielu modułów o wystarczająco długich nazwach pomocne może być przypisanie __import__funkcji do krótszej zmiennej i użycie jej do importu
Przykład:
Regularne instrukcje importu - 97 bajtów
z importu itertools *
z importu daty / godziny *
lista drukowania (permutacje („abc”))
print datetime.now ()
Przypisywanie __import__do i- 94 bajtów:
i = __ import__
lista drukowania (i („itertools”). permutacje („abc”))
print i („datetime”). datetime.now ()
__import__("x").doSomething()potrzebuje 15+ x znaków, aby odnosić się do modułu o nazwie długości x .
import x\nx.doSomething()potrzebuje 9 + 2 * x znaków. Funkcje te nakładają się na x = 6, więc w porównaniu z tym sposobem lepiej jest użyć dowolnego modułu o dłuższej nazwie __import__, cokolwiek krótszego korzysta z normalnego importu:
Jednak from x import*\ndoSomething()wymaga tylko 14+ x znaków, więc w porównaniu do normalnego importu nie jest tego warte, chyba że nazwa modułu jest dłuższa niż 5 znaków:
To wszystko zakłada, że masz na myśli funkcję / klasę / cokolwiek tylko raz. Jeśli odwołujesz się do niego więcej niż raz, formuły się zmieniają, a ta ostatnia wersja może zostać zwycięzcą. Jeśli kilkakrotnie użyjesz czegoś długiego z importowanego modułu, wygrywa jeszcze jedna wersja:
from x import y as zdaje ci 18+ x + y + z * ( n +1) znaków dla n zastosowań z , co jest dużym ulepszeniem, jeśli y jest duże, ponieważ z można wykonać 1.
Czy potrafisz sprawdzić swoją matematykę? Uważam, że jestem __import__("x").doSomething()o jeden węgiel krótszy niż from x import*;doSomething(). Może liczysz nowy wiersz jako dwa znaki? I przypominam sobie, że próg rentowności wynosi 5, mieszcząc się między timea random.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.
__import__
pomógłby wewnątrz nazwanej funkcji, ponieważ byłaby wewnątrz wciętego bloku. Import będzie kosztował więcej, ponieważ jest w dwóch liniach i wcięty. (Zakłada się, że importowanie nie jest dozwolone poza funkcją.)