在python中将函数作为参数传递

在python中将函数作为参数传递,python,lambda,Python,Lambda,假设我想计算以下f(f(…f(x)) 基本上是自身功能的许多倍。 目前,我正在执行以下操作以实现此结果(并返回所有中间步骤): 然后我将我的函数funcM作为参数传递: 打印迭代器(funcM,100,5) 这种方法没有错,计算是正确的 但是,有没有一种方法可以在不定义函数的情况下实现相同的功能funcM? 可能正在将lambda函数作为参数传递给迭代器函数(很抱歉,如果没有意义,我真的不知道lambda函数是什么)。是的,您可以只使用lambda表达式。它们就是为此而设计的 iterator(

假设我想计算以下
f(f(…f(x))

基本上是自身功能的许多倍。
目前,我正在执行以下操作以实现此结果(并返回所有中间步骤):

然后我将我的函数
funcM
作为参数传递:
打印迭代器(funcM,100,5)

这种方法没有错,计算是正确的

但是,有没有一种方法可以在不定义函数的情况下实现相同的功能
funcM


可能正在将lambda函数作为参数传递给迭代器函数(很抱歉,如果没有意义,我真的不知道lambda函数是什么)。

是的,您可以只使用lambda表达式。它们就是为此而设计的

iterator(lambda x: x/4+12, 100, 5)
主席的话:

lambda通常用于创建小型匿名函数。 实际上,它们只是定义函数的一种合成糖 上面的lambda表达式与函数完全相同,只是 没有名字

如果您想了解更多信息,请阅读以下内容:


lambda函数(或者更准确地说,lambda表达式)只是一个可以在需要的地方当场定义的函数。例如

f = lambda x: x * 2
是完全一样的事情

def f(x):
    return x * 2
当我说得准确的时候,我是认真的——它们反汇编成相同的字节码。两者之间的唯一区别是,第二个例子中定义的字节码有一个名称

Lambda表达式变得非常有用,因为创建Lambda表达式不是一个语句,这意味着,正如其他人已经回答的那样,您可以这样做

print iterator(lambda x: x / 4 + 12, 100, 5)
得到你想要的东西

然而,lambda表达式和正则函数之间的主要区别在于lambda更为有限。lambda只能包含表达式,不能包含语句。表达式是可以放在
=
赋值右侧的任何内容。(如果您想变得更迂腐,Python将表达式定义为)

这意味着lambda表达式不能赋值给变量(事实上,除了它的参数外,它根本不能有局部变量)。它不能打印(除非它调用另一个这样做的函数)。它不能有for循环、while循环、if测试(除了三元运算符
x if cond else y
),或try/except块

如果您需要执行这些操作,只需定义一个正则函数。事实上,任何时候您想使用lambda时,都要三思。如果使用正则函数,代码的可读性会更高吗?lambda表达式不是您希望在代码中的其他地方重用的东西吗


最后,一定要做最容易阅读和维护的代码。就性能而言,lambdas函数和普通函数没有区别。

感谢您提供有用的解释。请注意,在Python 3中,打印不是问题,因为
print
已更改为函数。
print iterator(lambda x: x / 4 + 12, 100, 5)