我發現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中有沒有辦法解決這個問題?
我發現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中有沒有辦法解決這個問題?
使用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 alambda
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 alambda
expression can offer over an explicitdef
statement (i.e. that it can be embedded inside a larger expression)
來源:http://legacy.python.org/dev/peps/pep-0008/#programming-recommendations
我愛你...它的工作 – user3065619 2014-11-03 23:03:27
@ user3065619只是想通過*爲什麼*它的工作原理:你不能使用lambda在第二行包含表達式,你只能用它來包含* result *的表達。 – Marius 2014-11-03 23:04:58
爲什麼*姓名*匿名*功能?使用def語句 – JBernardo 2014-11-03 23:05:13
什麼'這裏exp'? ? – Hackaholic 2014-11-03 23:01:53
你期望得到的結果是什麼?如果你在第二行「擴展」了「y」,它會是什麼樣子? – Marius 2014-11-03 23:02:20