¿Cuándo es beneficioso usar la importación en línea, de un solo uso en Python?
Por ejemplo:
__import__("x").doSomething()
¿Lo anterior es cada vez más corto que lo siguiente?
import x
x.doSomething()
O
from x import*
doSomething()
¿Cuándo es beneficioso usar la importación en línea, de un solo uso en Python?
Por ejemplo:
__import__("x").doSomething()
¿Lo anterior es cada vez más corto que lo siguiente?
import x
x.doSomething()
O
from x import*
doSomething()
Respuestas:
Esto puede ser útil si desea usar un módulo solo una vez en una función lambda anónima, ya que le permite evitar escribir una declaración separada:
lambda x:__import__('SomeModule').foo(x,123)
es un byte más corto que
from SomeModule import*;f=lambda x:foo(x,123)
Si el código es una función o programa con nombre, __import__es poco probable que ayude, excepto en las circunstancias más extremas o artificiales.
importque se llamaría dentro de un bloque sangrado? Probablemente no.
f=porque las funciones anónimas están permitidas y pueden tener contenido fuera de la función .
Al importar varios módulos con nombres suficientemente largos, puede ser útil asignar la __import__función a una variable más corta y usarla para importar
Declaraciones de importación regulares - 97 bytes
de itertools import *
desde la importación de fecha y hora *
imprimir lista (permutaciones ("abc"))
print datetime.now ()
Asignación __import__a i- 94 bytes:
i = __ import__
imprimir lista (i ("itertools"). permutaciones ("abc"))
print i ("datetime"). datetime.now ()
__import__("x").doSomething()necesita más de 15 caracteres x para referirse a un módulo con un nombre de longitud x .
import x\nx.doSomething()necesita 9 + 2 * x caracteres. Estas funciones se superponen en x = 6, por lo que en comparación con cualquier módulo con un nombre más largo es mejor usar __import__, cualquier cosa más corta se beneficia de las importaciones normales:

Sin embargo, from x import*\ndoSomething()solo necesita más de 14 caracteres x , por lo que, en comparación con la importación normal, no vale la pena a menos que el nombre del módulo tenga más de 5 caracteres:

Todo esto supone que se está refiriendo a una función / clase / lo que sea solo una vez. Si lo consulta más de una vez, las fórmulas cambian y la última versión podría convertirse en la ganadora. En caso de que use algo largo de un módulo importado varias veces, otra versión gana:
from x import y as zle proporciona 18+ x + y + z * ( n +1) caracteres para n usos de z , lo cual es una gran mejora si y es grande, porque se puede hacer z 1.
__import__("x").doSomething()ser un personaje más corto que from x import*;doSomething(). ¿Tal vez estás contando la nueva línea como dos caracteres? Y recuerdo que el punto de equilibrio fue 5, cayendo entre timey random.
z=__import__("x").yes un byte más corto quefrom x import y as z
from x import*;z=y.
__import__ayudaría dentro de una función con nombre ya que estaría dentro de un bloque sangrado. Una importación costaría más, ya que está en dos líneas y con sangría. (Eso supone que las importaciones no están permitidas fuera de la función.)