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()
__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ą.)import
został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 importuPrzykład:
Regularne instrukcje importu - 97 bajtów
Przypisywanie
__import__
doi
- 94 bajtów:źródło
Prawie nigdy.
__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 z
daje 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.źródło
__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ędzytime
arandom
.z=__import__("x").y
jest bajtem krótszym niżfrom x import y as z
from x import*;z=y
.