将函数作为参数传递,而不是在内部调用。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)