1

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

通常我可以用 switch 语句来做到这一点,但可惜 python 没有......

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

谢谢

4

4 回答 4

8

如果你想以编程方式导入模块,你可以这样做

module = __import__('module_name')

不过,发现自己似乎是一种奇怪的情况……检查你的设计并小心行事。

于 2013-02-25T15:05:33.833 回答
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)
于 2013-02-25T15:09:33.587 回答
2

你为什么不使用if

if a is "import_module1":
    import module1
elif a is "import_module2":
    import module2
于 2013-02-25T15:07:01.660 回答
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)
于 2013-02-25T15:21:27.767 回答