Quand est-il avantageux d'utiliser l'importation en ligne à usage unique en Python?
Par exemple:
__import__("x").doSomething()
Ce qui précède est-il toujours plus court que le dessous?
import x
x.doSomething()
Ou
from x import*
doSomething()
__import__
aiderait à l'intérieur d'une fonction nommée car elle serait à l'intérieur d'un bloc en retrait. Une importation coûterait plus cher car elle est sur deux lignes et en retrait. (Cela suppose que les importations ne sont pas autorisées en dehors de la fonction.)import
serait appelé à l'intérieur d'un bloc en retrait? Probablement pas.f=
car les fonctions anonymes sont autorisées et peuvent avoir du contenu en dehors de la fonction .Lors de l'importation de plusieurs modules avec des noms suffisamment longs, il peut être utile d'affecter la
__import__
fonction à une variable plus courte et de l'utiliser pour les importationsExemple:
Instructions d'importation régulières - 97 octets
Affectation
__import__
ài
- 94 octets:la source
Presque jamais.
__import__("x").doSomething()
nécessite plus de 15 caractères x pour faire référence à un module avec un nom de longueur x .import x\nx.doSomething()
nécessite 9 + 2 * x caractères. Ces fonctions se chevauchent à x = 6, donc par rapport à cette façon, tout module avec un nom plus long est préférable d'utiliser__import__
, tout ce qui est plus court bénéficie des importations normales:Cependant,
from x import*\ndoSomething()
n'a besoin que de 14+ x caractères, donc par rapport à l'importation normale, cela n'en vaut pas la peine à moins que le nom du module ne dépasse 5 caractères:Tout cela suppose que vous ne faites référence à une fonction / classe / autre qu'une seule fois. Si vous vous y référez plus d'une fois, les formules changent et cette dernière version pourrait devenir la gagnante. Si vous utilisez plusieurs fois un élément long d'un module importé, une autre version l'emporte:
from x import y as z
vous donne 18+ x + y + z * ( n +1) caractères pour n utilisations de z , ce qui est une grande amélioration si y est grand, car z peut être fait 1.la source
__import__("x").doSomething()
un caractère plus court quefrom x import*;doSomething()
. Peut-être que vous comptez la nouvelle ligne comme deux caractères? Et je me souviens que le seuil de rentabilité était de 5, se situant entretime
etrandom
.z=__import__("x").y
est un octet plus court quefrom x import y as z
from x import*;z=y
.