2014-11-03 66 views
2

我發現python不喜歡用lambda方程進行操作。在lambda方程上運行

y = lambda x: exp(2*x) 
m = lambda x: 2*y - x 

產生了錯誤:

TypeError: unsupported operand type(s) for *: 'int' and 'function' 

我目前工作很長的公式,我需要替換大量的公式,但是Python不會讓我上拉姆達方程進行操作。 在python中有沒有辦法解決這個問題?

+0

什麼'這裏exp'? ? – Hackaholic 2014-11-03 23:01:53

+1

你期望得到的結果是什麼?如果你在第二行「擴展」了「y」,它會是什麼樣子? – Marius 2014-11-03 23:02:20

回答

4

使用lambda創建匿名函數。因此,你需要把它叫爲一個:

m = lambda x: 2*y(x) - x 
#    ^^^ 

請參見下面的演示:

>>> lamb = lambda x: x * 2 
>>> lamb 
<function <lambda> at 0x0227D108> 
>>> lamb(4) 
8 
>>> 

或者,簡單來說,這樣做:

y = lambda x: exp(2*x) 

是一樣的做這個:

def y(x): 
    return exp(2*x) 

但是請注意即PEP 0008的官方風格指南Python代碼,譴責命名lambda表達式和到位的正常功能,使用它們的做法:

Always use a def statement instead of an assignment statement that binds a lambda expression directly to an identifier.

Yes:

def f(x): return 2*x

No:

f = lambda x: 2*x

The first form means that the name of the resulting function object is specifically f instead of the generic <lambda> . This is more useful for tracebacks and string representations in general. The use of the assignment statement eliminates the sole benefit a lambda expression can offer over an explicit def statement (i.e. that it can be embedded inside a larger expression)

來源:http://legacy.python.org/dev/peps/pep-0008/#programming-recommendations

+0

我愛你...它的工作 – user3065619 2014-11-03 23:03:27

+0

@ user3065619只是想通過*爲什麼*它的工作原理:你不能使用lambda在第二行包含表達式,你只能用它來包含* result *的表達。 – Marius 2014-11-03 23:04:58

+2

爲什麼*姓名*匿名*功能?使用def語句 – JBernardo 2014-11-03 23:05:13