[英]anonymous function assignment using a one line if statement
使用一行if語句將變量賦值給匿名函數時,'else'的情況不會按預期運行。 不是分配'else'之后列出的匿名函數,而是分配不同的匿名函數。 此函數返回預期的匿名函數。
>> fn = lambda x: x if True else lambda x: x*x
>> fn(2)
2
>> fn = lambda x: x if False else lambda x: x*x
>> fn(2)
<function <lambda> at 0x10086dc08>
>> fn('foo')(2)
4
似乎正在發生的是lambda x: x if False else lambda x: x*x
作為一個整體在'else'情況下作為匿名函數返回。 通過使用以下方法,我能夠實現所需的行為:
>> fn = (lambda x: x*x, lambda x: x)[True]
>> fn(2)
2
>> fn = (lambda x: x*x, lambda x: x)[False]
>> fn(2)
4
但是,我仍然想要了解這種不尋常行為的底部。 有什么想法嗎?
lambda
的綁定比條件表達式弱。 實際上,它在語言中具有最少的運算符優先級。 從文檔 1 :
所以,這一行:
fn = lambda x: x if True else lambda x: x*x
實際上被Python解釋為:
fn = lambda x: (x if True else lambda x: x*x)
要做你想做的事,你需要添加括號:
fn = (lambda x: x) if True else (lambda x: x*x)
1請注意,表格從最小到最大排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.