0

Python 3では、次のようなものが機能しました。

def aFunctionImportingAndCallingAnotherFunction(functionName, args):
    packageString = "a_nested_package.to_be_imported.at_run_time"
    _temp = __import__(packageString, globals(), locals(), [functionName], 0)
    function = eval("_temp." + functionName)
    return function(args)

Python 2.7 では、渡した関数がfunctionName存在しないというエラーが表示されます。

この例では、パッケージa_nested_packageは にsys.pathあり、パッケージto_be_importedにはパッケージがあり、パッケージにはパッケージがありますat_run_time。すべてのパッケージには__init__.pyファイルがあります。

私は試した:

  • レベル引数で遊んでいます(-1と1を試しました)
  • a_nested_packageからの削除packageString
  • から削除a_nested_packagepackageStringて置き換える.

また、これが関数の実行時インポートを行うための完全に間違ったアプローチである場合は、私に知らせてください! 私はPythonにかなり慣れていません(C ++、PHP、およびJavaから来ました)

4

2 に答える 2

3

モジュールを使用してimportlibモジュールを動的にインポートし、次に使用getattr()してそのモジュールから特定の名前を取得します。

import importlib

def aFunctionImportingAndCallingAnotherFunction(functionName, args):
    module = importlib.import_module(packageString)
    func = getattr(module, functionname)
    return func(*args)
于 2013-10-28T22:29:59.567 に答える