Kiedy warto korzystać z importowania w trybie pojedynczego, importu jednorazowego w Pythonie?
Na przykład:
__import__("x").doSomething()
Czy powyższe jest zawsze krótsze niż poniżej?
import x
x.doSomething()
Lub
from x import*
doSomething()
Kiedy warto korzystać z importowania w trybie pojedynczego, importu jednorazowego w Pythonie?
Na przykład:
__import__("x").doSomething()
Czy powyższe jest zawsze krótsze niż poniżej?
import x
x.doSomething()
Lub
from x import*
doSomething()
Odpowiedzi:
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.
importzostałby wywołany w wciętym bloku? Prawdopodobnie nie.
f=ponieważ anonimowe funkcje są dozwolone i mogą zawierać treści 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
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.
__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.
z=__import__("x").yjest bajtem krótszym niżfrom x import y as z
from x import*;z=y.
__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ą.)