首页 > 解决方案 > 将变量传递给函数 Python

问题描述

我有以下情况:我有一个单曲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不参考所需参数的情况下进行写入?我如何概括这一点?

标签: pythoncallback

解决方案


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

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

推荐阅读