我想根据 python 中变量的值调用不同的导入。
通常我可以用 switch 语句来做到这一点,但可惜 python 没有......
我在考虑有一个函数列表,每个函数都包含不同的导入,但有更好的方法吗?是否可以以与方法类似的方式列出导入?或者将模块名称作为字符串存储在列表中,然后将它们转换为可用于导入它们的形式?
谢谢
我想根据 python 中变量的值调用不同的导入。
通常我可以用 switch 语句来做到这一点,但可惜 python 没有......
我在考虑有一个函数列表,每个函数都包含不同的导入,但有更好的方法吗?是否可以以与方法类似的方式列出导入?或者将模块名称作为字符串存储在列表中,然后将它们转换为可用于导入它们的形式?
谢谢
如果你想以编程方式导入模块,你可以这样做
module = __import__('module_name')
不过,发现自己似乎是一种奇怪的情况……检查你的设计并小心行事。
通常,在 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)
你为什么不使用if
?
if a is "import_module1":
import module1
elif a is "import_module2":
import module2
我自己的代码示例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)