Wann ist es sinnvoll, Inline-Importe zum einmaligen Gebrauch in Python zu verwenden?
Beispielsweise:
__import__("x").doSomething()
Ist das Oben immer kürzer als das Unten?
import x
x.doSomething()
Oder
from x import*
doSomething()
Dies kann nützlich sein, wenn Sie ein Modul nur einmal in einer anonymen Lambda-Funktion verwenden möchten, da Sie so vermeiden können, eine separate Anweisung zu schreiben:
lambda x:__import__('SomeModule').foo(x,123)
ist ein Byte kürzer als
from SomeModule import*;f=lambda x:foo(x,123)
Wenn es sich bei dem Code um eine benannte Funktion oder ein benanntes Programm handelt, __import__
ist es unwahrscheinlich, dass dies hilfreich ist, es sei denn, es handelt sich um die extremsten oder erfundensten Umstände.
__import__
würde innerhalb einer benannten Funktion helfen, da sie sich innerhalb eines eingerückten Blocks befindet. Ein Import würde extra kosten, da er in zwei Zeilen und eingerückt ist. (import
der innerhalb eines eingerückten Blocks aufgerufen würde? Wahrscheinlich nicht.f=
da anonyme Funktionen zulässig sind und Inhalte außerhalb der Funktion enthalten können .Wenn Sie mehrere Module mit ausreichend langen Namen importieren, kann es hilfreich sein, die
__import__
Funktion einer kürzeren Variablen zuzuweisen und für den Import zu verwendenBeispiel:
Regelmäßige Importanweisungen - 97 Bytes
Zuweisen
__import__
zui
- 94 Bytes:quelle
Fast nie.
__import__("x").doSomething()
benötigt mehr als 15 x Zeichen, um auf ein Modul mit dem Namen Länge x zu verweisen .import x\nx.doSomething()
benötigt 9 + 2 * x Zeichen. Diese Funktionen überlappen sich bei x = 6, so dass im Vergleich zu dieser Methode jedes Modul mit einem längeren Namen besser verwendet__import__
werden kann. Kürzere Funktionen profitieren von normalen Importen:from x import*\ndoSomething()
Benötigt jedoch nur mehr als 14 x Zeichen, so dass es sich im Vergleich zum normalen Import nur lohnt, wenn der Modulname länger als 5 Zeichen ist:Dies alles setzt voraus, dass Sie sich nur einmal auf eine Funktion / Klasse / was auch immer beziehen. Wenn Sie mehrmals darauf verweisen, ändern sich die Formeln, und die letztere Version wird möglicherweise zum Gewinner. Wenn Sie mehrmals etwas Langes aus einem importierten Modul verwenden, gewinnt eine weitere Version:
from x import y as z
Sie erhalten 18+ x + y + z * ( n +1) Zeichen für n Verwendungen von z , was eine große Verbesserung darstellt, wenn y groß ist, da z zu 1 gemacht werden kann.quelle
__import__("x").doSomething()
einen Char kürzer alsfrom x import*;doSomething()
. Vielleicht zählst du den Zeilenumbruch als zwei Zeichen? Und ich erinnere mich, dass der Break-Even-Punkt 5 ist und zwischentime
und liegtrandom
.z=__import__("x").y
ist ein Byte kürzer alsfrom x import y as z
from x import*;z=y
.