Python:如何将小于(<)运算符与“and”关键字结合使用?

3

我正在阅读PIL的文档,链接,并发现了这一行。

mask = source[R].point(lambda i: i < 100 and 255)

那么,i < 100 and 255是什么意思呢?

4
如果i小于100,i < 100 and 255的结果将为255,否则将为False。这与255 if i < 100 else False是等价的。至于是否有意这么做,我不知道。 - khelwood
1
如果 i 大于 100,则返回 False,否则返回 255 - Ma0
1
文档中有这样的解释:“Python仅评估逻辑表达式中必要的部分以确定结果,并返回最后检查的值作为表达式的结果。因此,如果上述表达式为false(0),Python不会查看第二个操作数,因此返回0。否则,它将返回255。” - Thomas Francois
他们将一个 lambda 传递给一个方法的事实也相当不寻常。他们可以只传递 i 并在方法内部进行计算。有人在 Link 上太过于“时髦”了。 - Ma0
1个回答

5
这段话的意思是,Python仅评估逻辑表达式中用于确定结果的部分,并返回最后一个被检查的值作为表达式的结果。因此,如果上面的表达式为false(0),Python不会查看第二个运算数,因此返回0。否则,它将返回255。如果 i <100 为True,则返回 255 。这在整个RGB颜色方案中是有意义的,其中RGB(255,0,0)返回红色。但是,这是不好的实践。应该使用如下代码:
mask = source[R].point(lambda i: 255 if i < 100 else 0)

更易读的文本...


哦...有时候我离真相很近,但我不知道...谢谢你... - VimNing
1
有这个 x or 12 结构,在 orand 的情况下更易理解。如果 xFalse,则它会产生 12。在我看来,and 的对应部分非常神秘。如此神秘,以至于我首先发布了一个误导性的评论(“这是一个错误”)。 - Jean-François Fabre
1
@Jean-FrançoisFabre同意,但即使在这种情况下,除非我们在结构中处理单个变量(即x或y而不是(i < 100 and 255) or 0),否则手动阅读可能会有些困难。 - TerryA
是的,想法不是要推动它。 - Jean-François Fabre
1
公平地说,那些PIL文档中的代码是古老的,所以它可能比存在于 ... if... else ... 条件表达式语法之前。 - PM 2Ring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接