我接受了这个任务:
写一个将f(x)函数转换为f(x)的单行表达式 +1。提示:考虑如何创建本地框架绑定f的保存值,如果没有作业。
示例:
>>> f = lambda x: x*x >>> f(5) 25 >>> ---your one line expression--- >>> f(5) 26 >>> f, g = None, f >>> g(5) 26
我试着这样做:
k,f=f, lambda x: k(x)+1
它有效,但它使用了作业f=f
。如果没有作业我怎么能这样做?
我的老师告诉我,Python中有一个类似于Scheme中的let
函数的函数,但是我不确定她希望我们使用这个函数是什么,因为她没有提供功能名称。
答案 0 :(得分:10)
这不是一般应该使用的东西,但我想你可以这样做:
def f(x, f=f): return f(x) + 1
还有“没有(显式)赋值”,因为我们只是定义了一个与原始函数名称相同的新函数名称。
答案 1 :(得分:9)
这样可行,但可能是作弊:
>>> f = lambda x: x*x
>>> f(5)
25
>>> globals().update({'f': (lambda g: lambda x: g(x)+1)(f)})
>>> f(5)
26
>>> f, g = None, f
>>> g(5)
26