我想知道是否有可能找到一些相當於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