我想根据python中变量的值调用不同的导入。
通常我可以用switch语句执行此操作,但是alas python没有...
我在考虑拥有一个函数列表,每个函数都包含不同的导入,但是有更好的方法吗?是否可以以与方法类似的方式列出导入?或者将模块名称作为字符串存储在列表中,然后将它们转换为可用于导入它们的表单?
由于
答案 0 :(得分:8)
如果要以编程方式导入模块,可以执行
module = __import__('module_name')
虽然发现自己似乎是一种奇怪的情况..检查你的设计并小心谨慎。
答案 1 :(得分:4)
通常,在Python中,您可以用字典替换switch
结构。要使用存储在字符串中的名称导入模块,可以使用importlib.import_module()
。这是一个例子:
from importlib import import_module
modlist = {'case 1': ('package1', 'module1'), 'case 2': ('package2', 'module2')}
myvar = 'case 2'
mypackage, mymodule = modlist[myvar]
import_module(mymodule, mypackage)
答案 2 :(得分:2)
为什么不使用if
?
if a is "import_module1":
import module1
elif a is "import_module2":
import module2
答案 3 :(得分:0)
来自我自己的代码http://felicitous-desktop.googlecode.com/files/felicitous.py
的示例该脚本设置桌面背景。根据桌面是Windows还是Gnome,它会导入不同的库:
if ( platform.system() == "Windows" ):
set_windows_background(dest)
else:
set_gnome_background(dest)
,其中
def set_gnome_background(x):
import gconf
client = gconf.client_get_default()
client.set_string ("/desktop/gnome/background/picture_filename",x)
def set_windows_background(x):
import ctypes
SPI_SETDESKWALLPAPER = 20 # According to http://support.microsoft.com/default.aspx?scid=97142
import tempfile
from PIL import Image
image = Image.open(x)
bmppath= os.path.normpath(os.path.expanduser("~/epic.bmp"))
image.save (bmppath, "BMP")
print bmppath
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, bmppath , 0)