我想写一种CPS代码更高的功能。他们应该获取一个函数代码,将其封装在对象中并添加用于组合这些对象的方法。更多功能python
事情是这样的:
myFunction=MyFunction(
a = b+c
print(c)
return a)
但只有一个匿名函数Python的表达 - 拉姆达声明。它适合不太好。
Python是一种功能强大的语言,它有不同的表达式:装饰器,eval等...有没有一种好的方法来编写像上面例子中的匿名函数?
其他方法是扩展lambda表达式,其中包含一次性绑定和返回等特殊函数,以及用于编写复杂表达式单行的其他高阶函数。
主要目的是创建自定义控件表达式。
class TimeoutExpression:
def __init__(self,name,function,timeout):
...
def eval(self):
""" eval functions, print result and error message
if functions failed to calculate in time """
...
def andThen(self,otherExpression):
""" create complex sequential expression"
...
def __call__(self):
...
,它是在后续的使用方式:
TimeoutExpression(time consuming calculation).andThen(
file object access).andThen(
other timer consuming calcualtion)
什么是用于创建自定义的控制流结构的最好的Python惯用方式是什么?
我读过讨论:How to make an anonymous function in Python without Christening it? 有人提到了几种使用相同方法的决定:从三重引用字符串生成函数。 看起来相当麻烦,而绝对正确的行为。这是现在设计的最好方法吗?
更新:
有人告诉我,是没有问题的,Python允许你在任何环境中使用高清。我认为我的蟒蛇经验欺骗了我,并试图在建议的任何范围中使用def。我有一个错误。我应该如何在任何情况下放置def?
def compose(f):
return lambda k: lambda x: f(k(x))
test = compose(def sqr(x) :
print ("sqr "+str(x))
return x*x
return sqr) (def x2(x):
print("x2 "+str(x))
return x*2
return x2)
错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "anonFunction.py", line 4
test = compose(def sqr(x) :
^
SyntaxError: invalid syntax
为什么它必须是匿名的? – KillianDS 2012-04-19 19:10:19
复杂和单行不适合python zen – KurzedMetal 2012-04-19 19:11:04
每种语言都不一样。不要试图用Python来编写功能代码,就像用另一种语言完全一样。 – agf 2012-04-19 19:11:07