Python:如何执行生成的代码?

Nat*_*tim 1 python django

我有这个代码,我想使用app参数生成代码而不是复制它.

if app == 'map':
    try:
        from modulo.map.views import map
        return map(request, *args, **kwargs)
    except ImportError:
        pass

elif app == 'schedule':
    try:
        from modulo.schedule.views import schedule
        return schedule(request, *args, **kwargs)
    except ImportError:
        pass

elif app == 'sponsors':
    try:
        from modulo.sponsors.views import sponsors
        return sponsors(request, *args, **kwargs)
    except ImportError:
        pass

elif app == 'streaming':
    try:
        from modulo.streaming.views import streaming
        return streaming(request, *args, **kwargs)
    except ImportError:
        pass
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗 ?

谢谢

Ale*_*lli 6

我更喜欢使用dispatch-dictionary idiom,编码类似......:

import sys

dispatch = { 'map': ('modulo.map.views', 'map'),
             'schedule': ('modulo.schedule.views', 'schedule_day'),
             ...etc etc.. }
if app in dispatch:
  modname, funname = dispatch[app]
  try: __import__(modname)
  except ImportError: pass
  else:
    f = getattr(sys.modules[modname], funname, None)
    if f is not None:
      return f(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

不确定你认为"代码生成"会让你更喜欢这种方法.