将变量传递给函数Python

时间:2018-04-27 16:14:49

标签: python callback

我遇到以下情况:我希望将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而不参考所需的参数?我该如何概括呢?

2 个答案:

答案 0 :(得分:1)

最好的方法是让调用保持不变

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())

这在Python 3的潜力方面效果更好:

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

答案 1 :(得分:1)

这是您的代码,根据我提到的副本进行更新。

def sub_function_1( x, y, z):
   return x + y + z

def sub_function_2( x, y ):
   return x + y 

def master_function(*args):
   F = args[-1]
   F_args = args[:-1]
   x = args[0]
   y = args[1]

   return x*y + F(*F_args)

print(master_function(1, 2, 3, sub_function_1))
print(master_function(-10, -20, sub_function_2))

输出:

8
170