如何在Python中将函数作为函数参数传递


问题内容

这是我目前拥有的,并且工作正常:

def iterate(seed, num):
    x = seed
    orbit = [x]
    for i in range(num):
        x = 2 * x * (1 - x)
        orbit.append(x)
    return orbit

现在,如果我想将第5行的迭代方程式更改为x = x **
2-3,则必须使用第5行以外的所有相同代码创建一个新函数。如何创建更通用的函数能以函数为参数的函数?


问题答案:

函数是Python中的一等公民。您可以将函数作为参数传递:

def iterate(seed, num, fct):
#                      ^^^
    x = seed
    orbit = [x]
    for i in range(num):
        x = fct(x)
        #   ^^^
        orbit.append(x)
    return orbit

在代码中,您将传递所需的函数作为第三个参数:

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

iterate(seed, num, f)
#                  ^

要么

def g(x):
    return 3*x*(2-x)

iterate(seed, num, g)
#                  ^

要么 …


如果您不想每次都命名一个新函数,则可以选择传递一个匿名函数(即 lambda ):

iterate(seed, num, lambda x: 3*x*(4-x))