tipos python variables variable-variables

tipos - types of variables in python



¿Cómo importo paquetes variables en Python como usar variables variables($$) en PHP? (5)

Quiero importar un paquete dependiendo de qué valor elija el usuario.

El valor predeterminado es file1.py :

from files import file1

Si el usuario elige el file2 , debería ser:

from files import file2

En PHP, puedo hacer esto usando variables variables :

$file_name = ''file1''; include($$file_name);

$file_name = ''file2''; include($$file_name);

¿Cómo puedo hacer esto en Python?


Como dice Fredrik Lundh:

De todos modos, así es cómo funcionan estas declaraciones y funciones:

import X importa el módulo X y crea una referencia a ese módulo en el espacio de nombre actual. O en otras palabras, después de ejecutar esta instrucción, puede usar X.name para referirse a las cosas definidas en el módulo X.

from X import * importa el módulo X y crea referencias en el espacio de nombres actual para todos los objetos públicos definidos por ese módulo (es decir, todo lo que no tiene un nombre que empiece por "_"). O en otras palabras, después de ejecutar esta instrucción, simplemente puede usar un nombre simple para referirse a las cosas definidas en el módulo X. Pero X no está definido, por lo que X.name no funciona. Y si el nombre ya estaba definido, se reemplaza por la nueva versión. Y si el nombre en X se cambia para señalar a otro objeto, su módulo no lo notará.

from X import a, b, c importa el módulo X y crea referencias en el espacio de nombres actual para los objetos dados. O en otras palabras, ahora puede usar b y c en su programa.

Finalmente, X = __import__(''X'') funciona como import X , con la diferencia de que 1) pasa el nombre del módulo como una cadena, y 2) lo asigna explícitamente a una variable en su espacio de nombre actual.

Y, por cierto, ese es el último método en el que estás interesado.

Simplemente escribe (por ejemplo):

var = "datetime" module = __import__(var)


Probablemente sea una mala idea dejar que el usuario elija qué importar. Los paquetes pueden ejecutar código en la importación, por lo que efectivamente le permite a un usuario ejecutar código de forma arbitraria en su sistema. Mucho más seguro para hacer algo como

if user_input == ''file1.py'': from files import file1 as file elif user_input == ''file2.py'': from files import file2 as file else: file = None print "Sorry, you can''t import that file"


Python no tiene una función que sea directamente equivalente a las "variables variables" de PHP. Para obtener el valor de una "variable variable" (o el valor de cualquier otra expresión) puede usar la función eval .

foo = "Hello World" print eval("foo")

Sin embargo, esto no se puede usar en una declaración de import .

Es posible usar la función __import__ para importar usando una variable.

package = "os" name = "path" imported = getattr(__import__(package, fromlist=[name]), name)

es equivalente a

from os import path as imported


Viejo hilo, pero necesitaba la respuesta, por lo que alguien más podría ...

Hay una manera más clara de hacer esto en Python 2.7+:

import importlib my_module = importlib.import_module("package.path.%s" % module_name)


mattjbray en la respuesta de mattjbray :

from importlib import import_module # lookup in a set is in constant time safe_names = {"file1.py", "file2.py", "file3.py", ...} user_input = ... if user_input in safe_names: file = import_module(user_input) else: print("Nope, not doing this.")

Guarda algunas líneas de código, y le permite establecer safe_names programáticamente, o cargar múltiples módulos y asignarlos a un dict, por ejemplo.