传递函数作为参数vs在里面调用它。在Python中推荐哪一个

时间:2016-11-18 11:30:33

标签: python

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

var App = React.createClass({

    componentDidMount: function() {
        var card = this.refs.card.getDomNode();
    },

    render: function() {
        return(
            <div>
                <Card ref="card"/>              
            </div>
        )
    }
});

两个函数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_and_square_one执行相同的任务。但是前者将sum_and_square_two作为参数,而后者则在内部调用add_nums。我的问题是哪一个是更好的方式。将函数作为参数传递或在函数内部调用?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

或者,将你毫无意义的例子改写成一个没有意义的例子(但仍然相当):

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)

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