开发者

How is calling module and function by string handled in python?

Calling a function of a module from a string with the function's name in Python shows us how to call a function by using getattr("bar")(), but this assumes that we have the module foo imported already.

How would would we then go about 开发者_JAVA百科calling for the execution of "foo.bar" assuming that we probably also have to perform the import of foo (or from bar import foo)?


Use the __import__(....) function:

http://docs.python.org/library/functions.html#import

(David almost had it, but I think his example is more appropriate for what to do if you want to redefine the normal import process - to e.g. load from a zip file)


You can use find_module and load_module from the imp module to load a module whose name and/or location is determined at execution time.

The example at the end of the documentation topic explains how:

import imp
import sys

def __import__(name, globals=None, locals=None, fromlist=None):
    # Fast path: see if the module has already been imported.
    try:
        return sys.modules[name]
    except KeyError:
        pass

    # If any of the following calls raises an exception,
    # there's a problem we can't handle -- let the caller handle it.

    fp, pathname, description = imp.find_module(name)

    try:
        return imp.load_module(name, fp, pathname, description)
    finally:
        # Since we may exit via an exception, close fp explicitly.
        if fp:
            fp.close()


Here is what i finally came up with to get the function i wanted back out from a dottedname

from string import join

def dotsplit(dottedname):
    module = join(dottedname.split('.')[:-1],'.')
    function = dottedname.split('.')[-1]
    return module, function

def load(dottedname):
    mod, func = dotsplit(dottedname)
    try:
        mod = __import__(mod, globals(), locals(), [func,], -1)
        return getattr(mod,func)
    except (ImportError, AttributeError):
        return dottedname


this solution is not working? Calling a function of a module from a string with the function's name in Python

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜