変数を関数Pythonに渡す

AngusTheMan

私は次の状況にあります:私は私が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)必要に応じて呼び出すことができます

残念ながら、マスター関数に渡したい関数がたくさんあります。したがって、このアプローチは適切ではありません。

書き込みをする方法があるFmaster_function必要な引数を参照せずには?これを一般化するにはどうすればよいですか?

cdhagmann

最良の方法は、呼び出しを一定にすることです

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]

編集
0

コメントを追加

0

関連記事