私は次の状況にあります:私は私がmaster_function
渡したいシングルを持っsub_function
ています。これに渡したい関数が変更されます(たとえば、1と2)。各関数の引数も、その数とタイプが異なります。
def sub_function_1( x, y, z):
return x + y + z
def sub_function_2( x, y ):
return x + y
def master_function( x, y, z, F ):
return x*y + F()
クイックフィックス
これに対する簡単な修正は、使用されているかどうかに関係なく、考えられるすべての引数を使用して関数コールバックを作成することです。
def master_function( x, y, z, F ):
return x*y + F(x,y,z)
その後、master_function( x, y, z, sub_function_1)
またはmaster_function( x, y, z, sub_function_2)
必要に応じて呼び出すことができます。
残念ながら、マスター関数に渡したい関数がたくさんあります。したがって、このアプローチは適切ではありません。
書き込みをする方法があるF
にmaster_function
必要な引数を参照せずには?これを一般化するにはどうすればよいですか?
最良の方法は、呼び出しを一定にすることです
def sub_function_1( x, y, z):
return x + y + z
def sub_function_2( x, y, z ):
return x + y
def master_function( x, y, z, F ):
return x * y + F(x,y,z)
ただし、必要に応じて、より動的にすることができます。
def sub_function_1( x, y, z, **kwargs):
return x + y + z
def sub_function_2( x, y, **kwargs ):
return x + y
def master_function( x, y, z, F ):
return x * y + F(**locals())
これは、Python3の可能性で次のようにうまく機能します。
def sub_function_1(*args):
return args[0] + args[1] + args[2]
def sub_function_2(*args):
return args[0] + args[1]
def master_function(*args, F):
return args[0] * args[1] + F(*args)
.
.
.
>>> master_function(1,2,3,F=sub_function_1)
8
>>> master_function(1,2,3,F=sub_function_2)
5
>>> master_function(1,2,F=sub_function_2)
5
>>> master_function(1,2,F=sub_function_1)
IndexError: tuple index out of range
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加