我在python中重新考虑一些方案练习(如果有意义的话),找出py可以在FP方面做什么.我的问题在python中涉及lambda:
我可以在python中定义一个函数作为参数之一吗?
想想:
def f (op,x,y): #return some lambda function that combines x and y in the appropriate way #i.e if op is +, then return x+y, if op is -, then return x-y etc #Edit : added usage #this should be called like this: f(+, 1,2) #should return 3我知道这是可能的方案,但有什么等同于python?我得到的印象是,在python中的lambda只是定义一个方法的一种较短的方式,我没有找到任何方法来定义python中的一般组合函数.
我可以在你的问题中看到一些点,让我们按顺序通过它们:
我可以把一个函数作为参数传递给某人吗?
是:
def f(op, x, y): return op(x, y) def add(x, y): return x + y f(add, 10, 7) #gives 172.那么呢呢呢?
与方案不同,Python操作符不是函数,因此您不能直接作为参数传递它们.您可以自己创建包装器功能,也可以从标准库导入 operator 模块.
import operator operator.add(1, 2) (lambda x,y : x+y)(1, 2)在大多数情况下,运算符不是真正的功能是有点难过,但至少Python给我们链接的比较,如10<= x<100交换... 那么Python和Scheme之间有什么区别呢? 在一般意义上,Python中的函数与Scheme中的函数一样强大,但有一些注意事项: lambda关键字有限 您只能具有单个表达式作为函数体
f = lambda x, y: x + y由于Python中有一些是语句而不是表达式(赋值,2.x打印,…)的东西,往往需要回到命名函数.
有关闭
def make_printer(msg): def printer(): print msg return printer printer('a message')()但它们中变异的变量是一种痛苦
这不行.它尝试绑定内部函数的新n,而不是使用外部函数
def make_counter(n): def inc(): n = n + 1 return n return inc新的3.x非本地关键字
def make_counter(n): def inc(): nonlocal n n = n + 1 return n return inc解决方案w /可变对象
def make_counter(n): nw = [n] def inc(): nw[0] = nw[0] + 1 return nw[0] return inc对象而不是关闭.使用魔术__call__方法假装其功能
class Counter: def __init__(self, n): self.n = n def __call__(self): self.n += 1 return self.n
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/7974442/lambda-in-python





