1

Python の変数の値に基づいて、さまざまなインポートを呼び出したいと考えています。

通常、これはswitchステートメントで行うことができますが、残念ながらpythonには何もありません...

それぞれが異なるインポートを含む関数のリストを持つことを考えていましたが、より良い方法はありますか? メソッドと同様の方法でインポートをリストすることは可能ですか? または、モジュール名を文字列としてリストに保存し、インポートに使用できる形式に変換しますか?

ありがとう

4

4 に答える 4

8

プログラムでモジュールをインポートしたい場合は、次のことができます

module = __import__('module_name')

自分自身を見つけるのは奇妙な状況のように思えます.. デザインを確認し、注意して進めてください.

于 2013-02-25T15:05:33.833 に答える
4

switch通常、Pythonでは、構造を辞書に置き換えることができます。文字列に格納された名前を使用してモジュールをインポートするには、を使用できます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 に答える