1

私は、産業用タッチスクリーンのIDEにインポートできるXMLファイルをバッチ生成するプロジェクトに取り組んでいます。

各XMLファイルは画面を表し、ほとんどの画面には同じ機能が必要であり、各画面タイプに固有の構成機能があることを除いて、それらを処理するプロセスは同じです。

画面タイプに固有の属性を保持するクラスを使用しているScreenTypeので、タイプごとに一意の構成を記述し、それをパラメーターとして__init__()このクラスのに渡すことにしました。このように、ScreenType必要に応じて回すと、構成機能がバンドルされたままになり、必要なときにいつでも使用できます。

しかし、構成関数自体に依存関係がある場合はどうなるかわかりません。例えば:

def configure_inputdiag(a, b, c):
    numerical_formatting = get_numerics(a)
    # ...
    return configured_object

次に、のインスタンスを作成するときが来たらScreenType

myscreentype = ScreenType(foo, man, shoe, configure_inputdiag)

get_numericsはモジュールスコープの関数ですが、myscreentype他のモジュール内で渡される可能性があります(実際に渡されます)。

これは依存関係に問題を引き起こしますか?自分でテストしてみようと思いますが、関数をパラメータとして渡したときに何が起こっているのか、基本的な理解がないようです。何が起こっているのかについて間違った結論を導きたくありません。

私が試したこと:グーグル、検索SO、そしてPython専用のものは何も見つかりませんでした。

前もって感謝します。

4

3 に答える 3

3

問題ないよ。

関数は、それが定義されたコンテキストでconfigure_inputdiag常に参照します。したがって、について何も知らない他のモジュールからget_numerics呼び出した場合でも、正常に機能します。configure_inputdiagget_numerics

関数をパラメーターとして渡すと、その関数への参照が生成されます。その参照を通じて、名前(または関数の元となったモジュール)を実際に知らなくても、名前で関数を呼び出したかのように関数を呼び出すことができます。参照はプログラムの存続期間中有効であり、常に同じ関数を参照します。関数参照を保存すると、基本的に同じ関数の別の名前になります。

于 2013-02-06T21:36:17.777 に答える
2

あなたがやろうとしていることは、Pythonでは非常に自然な形で機能します-

上記の例では、「configure_inputdiag」が存在する名前空間(モジュール)に「get_numerics」関数をインポートする必要はありません。通常のパラメーターとして渡すだけで(たとえば、「関数」と呼びます)、この例のようになります:

モジュールA:

def get_numerics(parm):
    ...

input diag = module_B.configure_inputdiag(get_numerics, a)

モジュールB:

def configure_inputdiag(function, parm):
     result = function(parm)

ああ-私はあなたの疑いが逆になっているのを見ました-とにかく、問題はありません-Pythonでは、関数はファーストクラスのオブジェクトです-intやstringsのようなjsutであり、他のモジュールの他の関数へのパラメータとしてあなたと同じように渡すことができます願い。上記の例はそれを明らかにしていると思います。

于 2013-02-06T21:36:02.000 に答える
2

get_numerics関数本体のスコープ内で解決されるため、呼び出し元のスコープ内にある必要もありません。

于 2013-02-06T21:36:11.360 に答える