我想知道是否有可能找到一些相当于Python中的C#多行lambda函数。Python多行lambda
我想写这个方法相当于一些Python代码。但据我所知,在Python中不可能有多行lambda函数。关于一些python等效代码的任何想法?
我想知道是否有可能找到一些相当于Python中的C#多行lambda函数。Python多行lambda
我想写这个方法相当于一些Python代码。但据我所知,在Python中不可能有多行lambda函数。关于一些python等效代码的任何想法?
如果将表达式放在圆括号中,可以在多行上定义lambda表达式。这创建了一个隐含的行连续,导致直到右括号忽略换行符。
>>> func = lambda a,b: (
... b - a if a <= b else
... a*b
...)
>>>
>>> func(23, 42)
19
,也可以明确使用续行字符“\”,但这不是由Python style guide首选方法。 (不,结合lambda表达式来名a good idea to begin with,在公平...)
>>> func = lambda a,b: \
... b - a if a <= b else \
... a*b
>>>
>>> func(23, 42)
19
当然,你只能有你的拉姆达内的表达式,而不是语句。所以正确的if
块和return
等仍然是不可能的。
此外,可能没有必要在所有在这里使用lambda表达式,因为不像C#,Python是能够嵌套功能全(前最近v 7.0):
>>> def method(x,y):
... def func(a,b):
... if a <= b:
... return b - a
... return a * b
... return func(x,y)
...
>>> method(23, 42)
19
你可以将它写成内联函数:
lambda x, y : (x<=y)*(y-x) + (x>y)*x*y
这让我回到古代BASIC方言的那些日子,那里的建筑很常见。虽然我们做的稍微有点不同,因为比较结果返回-1为真。 –
如果您需要多行,则不需要使用lambda表达式,而是使用作用域函数定义。由于它在方法内部定义,所以只能在该上下文内部看到。
def Method(x, y):
def func(temp1, temp2):
if temp1 <= temp2:
return temp2 - temp1
else:
return temp1 * temp2
return func(temp1, temp2)
我说任何时候,你都忍不住给拉姆达的名称,除东西传递给你换个地方,使用拉姆达的DEF来代替。
即使有办法,使用它的理由是什么?您已经为该函数定义了一个名称('func'),并且已经使用多行,为什么不使用标准的'def'?另外,Python lambda只允许包含表达式(if'if') – DeepSpace
在这种特殊情况下,它可以被重写为C#或Python中的单行('t1,t2)=> t1 <= t2? t2 - t1:t1 * t2'。 – juharr