python中的import语句列表

时间:2013-02-25 15:03:25

标签: python switch-statement python-import

我想根据python中变量的值调用不同的导入。

通常我可以用switch语句执行此操作,但是alas python没有...

我在考虑拥有一个函数列表,每个函数都包含不同的导入,但是有更好的方法吗?是否可以以与方法类似的方式列出导入?或者将模块名称作为字符串存储在列表中,然后将它们转换为可用于导入它们的表单?

由于

4 个答案:

答案 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)