为什么它被认为是强大的'传递函数作为参数?

时间:2015-01-13 20:24:46

标签: python function parameters

我正在阅读Mark J.Johnson撰写的简明的Python编程简介,我偶然发现了一段使用飞镖来估算图下面积的代码。代码工作得非常好,但是我很困惑,为什么你要将函数作为参数传递,如果你可以直接调用函数。

from random import uniform
from math import exp

def area(function , a ,b ,m ,n = 1000 ):   #changed parameter for better understanding
    hits = 0
    total_area = m * (b-a)
    for i in range(n):
        x = uniform(a,b)
        y = uniform(0,m)
        if y <= function(x):
           hits += 1

    frac = hits / float(n)
    return frac * total_area

def f(x):
    return exp(-x**2)

def g(x):          #new function
    return exp(-x**2) + 2

def main():
    print area(f,0,2,1)
    print area(g,0,2,1)
main()  

他声称将函数作为参数传递是强大的&#39;但我不明白为什么?

2 个答案:

答案 0 :(得分:4)

f只是一个图表功能。它不是您可以定义的唯一功能来创建图形。

您还可以定义其他功能:

def g(x):
    return 2 * x ** 2 + x + 5

并将其传递到area() ,而无需更改该功能area()足够通用,可以计算不同图函数的面积,您需要做的就是传递图函数,让它计算出该区域。

如果你硬编码f而不是使用参数,你就不能再这样做了。

答案 1 :(得分:2)

我认为答案应该是显而易见的,尤其是在这种情况下:你可以为微积分集成编写一个通用函数,它可以处理你传入的任何函数。你可以通过提供一个函数来修改你正在集成的函数。新功能。同样适用于其他操作,如图表。