gpt4 book ai didi

python - 为什么这个 lambda 函数在 else 语句中表现得很奇怪?

转载 作者:太空狗 更新时间:2023-10-29 23:56:47 24 4
gpt4 key购买 nike

有人可以向我解释为什么我得到 <function <lambda>.<locals>.<lambda> at 0x0000000002127F28>而不是 3

>>> foo = True
>>> bar = lambda x: x + 1 if foo else lambda x: x + 2
>>> bar(1)
2

>>> foo = False
>>> bar = lambda x: x + 1 if foo else lambda x: x + 2
>>> bar(1)
<function <lambda>.<locals>.<lambda> at 0x0000000002127F28> # Hey !? WTF ?

最佳答案

Python 的操作顺序与您在这里所想的不同。看来您应该将定义更改为

bar = (lambda x: x + 1) if foo else (lambda x: x + 2)

你的定义实际得到的是

bar = lambda x: (x + 1 if foo else lambda x: x + 2)

换句话说,您正在返回一个函数,如果 foo 为真,则函数返回 x+1 的值,但如果为假,则返回函数lambda x: x + 2。您真正想要的是返回修改后的定义所做的两个函数之一。

这个故事的寓意:使用大量括号来明确您的意图。


对您问题的评论暗示了另一种可能性:

bar = lambda x: x + 1 if foo else x + 2

相当于

bar = lambda x: (x + 1 if foo else x + 2)

这和我的建议不一样。我的建议在执行时返回两个函数之一。一个函数总是加 1,另一个总是加 2,返回哪个函数取决于 foo 执行定义行时的值。此处的备选方案仅返回一个函数,并且此函数根据 foo 的值添加一个或两个 在计算函数时。你看得到差别吗?备选方案更频繁地更改。只有您能说出哪些符合您的需求。

关于python - 为什么这个 lambda 函数在 else 语句中表现得很奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51350179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com