我将重新访问python中的一些scheme练习(如果这有意义的话),以了解python在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
我知道这在scheme中是可能的,但是python中是否有类似的东西?我的印象是,python中的lambda只是定义方法的一种较短的方法,我还没有找到任何方法来定义python中的一般组合器函数。
我认为你最好的办法是做一个函数来做运算符,然后传递给:
不过,当你能做到以下几点时,看起来有点多余:
我可以看出你的问题中的一些要点,让我们按顺序来讨论一下:
一。我可以把函数作为参数传递给某人吗?
是的:
2。那么接线员呢?
与scheme不同,Python运算符不是函数,因此不能直接将它们作为参数传递。您可以自己创建包装函数,也可以从标准库导入operator模块。
在大多数情况下,运算符不是真正的函数有点悲哀,但至少Python给了我们链式的比较,比如
10 <= x < 100
作为交换。。。三。那么Python和Scheme有什么区别呢?
一般来说,Python中的函数和Scheme中的函数一样强大,但是需要注意的是:
lambda关键字是有限的
只有一个表达式作为函数体
由于Python中有很多东西是语句而不是表达式(赋值,2.x
print
,…),因此通常需要返回到命名函数。有闭包
但其中的变异变量是一种痛苦
这不管用。它试图为内部函数绑定一个新的n,而不是使用外部函数
新的3.x非本地关键字
带可变对象的解决方案
对象而不是闭包。使用magic
__call__
方法假装它是一个函数运算符在python中并不是真正的函数,更像是方法——} module 中的函数模拟所需的行为。
x + y
是x.__add__(y)
或y.__radd__(x)
的缩写。可以使用^{相关问题 更多 >
编程相关推荐