在没有赋值的情况下更改函数的定义

时间:2014-12-17 18:26:55

标签: python

我接受了这个任务:

  

写一个将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函数的函数,但是我不确定她希望我们使用这个函数是什么,因为她没有提供功能名称。

2 个答案:

答案 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