将函数作为参数传递,而不是在内部调用。Python中推荐哪一种

将函数作为参数传递,而不是在内部调用。Python中推荐哪一种,python,Python,假设我在一个模块中有三个函数,定义如下: def add_nums(a, b): return a + b def sum_and_square_one(add_nums, a, b): result = add_nums(a,b) return result*result def sum_and_square_two(a, b): result = add_nums(a,b) return result*result 这两个函数sum_和_square

假设我在一个模块中有三个函数,定义如下:

def add_nums(a, b):
    return a + b

def sum_and_square_one(add_nums, a, b):
    result = add_nums(a,b)
    return result*result

def sum_and_square_two(a, b):
   result = add_nums(a,b)
   return result*result

这两个函数
sum_和_square_one
sum_和_square_two
执行相同的任务。但是前者将
add_nums
作为参数,而后者在内部调用
add_nums
。我的问题是哪种方法更好。将函数作为参数传递或在函数内部调用?

如果总是希望调用相同的函数,那么每次都将其作为参数传递是没有意义的。(在您的示例中就是这种情况)


但是,如果您希望动态调用不同(可能类似)的函数,那么将appropiate函数作为参数传递是有意义的。

取决于您的用例。是否需要函数根据该参数更改其工作方式

或者,将你毫无意义的例子改写成一个不那么毫无意义的例子(但仍然很有意义):


唯一的问题是:您需要增加灵活性吗?否则,它只是无用的额外键入。这个问题必须逐案回答;它需要一个完整的例子来给出有用的答案。

我给出这个例子只是为了演示一下。作为参数传递或在内部调用的函数不一定是固定(一)函数。它可以是任何函数。@Zerihun是的,我刚才还用了你的例子试图指出什么时候可以使用参数,什么时候不可以。如果您希望能够更改函数的一部分的工作方式,可以将该部分作为参数传递给函数(而不是编写仅在几行中不同的多个函数)。思百吉为我的意思提供了一个简单的好例子。
def add_nums(a, b):
    return a + b

def do_something_then_square(a, b, what_to_do):
    result = what_to_do(a, b)
    return result * result

def sum_then_square(a, b):
   result = add_nums(a, b)
   return result * result

# Then you do:
sum_then_square(2, 5)                                          # 49
do_something_then_square(2, 5, what_to_do=add_nums)            # 49
do_something_then_square(2, 5, what_to_do=lambda a, b: a + b)  # 49
do_something_then_square(2, 5, what_to_do=lambda a, b: a * b)  # 100
do_something_then_square(2, 5, what_to_do=min)                 # 4
do_something_then_square(2, 5, what_to_do=complex)             # (-21+20j)