当前位置: 首页 > 科技观察

不可思议,Python 的链式操作竟然可以这样

时间:2023-03-19 20:38:18 科技观察

难以置信Python的链式运算竟然可以这样我以前遇到过,刚开始看到的时候觉得不可思议,但是仔细研究之后,突然觉得豁然开朗,Python的链式运算就是这样的场景。难以置信比如你看到True是False,结果是False,False是False,结果是True,你不会觉得有什么问题:>>>TrueisFalseFalse>>>FalseisFalseTrue然后,当你看到True是False的时候False结果为False,这可能令人难以置信。>>>TrueisFalseisFalseFalse>>>因为不管是从过去算还是从后面算,结果都应该是True:>>>(TrueisFalse)isFalseTrue>>>Trueis(FalseisFalse)True>>>认知的时候豁然开朗和现实情况不一致的时候,恰恰是我们需要学会改正自己的时候。这种操作是链式操作,在Python官方文档中有解释:https://docs.python.org/3/reference/expressions.html#comparisons翻译一下,大致意思是Python中的比较操作不一样从C语言来看,这些比较操作具有相同的优先级,低于任何算术、移位或按位操作。这些比较操作包括in、notin、is、isnot、<、<=、>、>=、!=、==运算符,它们将产生True或False结果。这些比较运算符可以任意链接,如:xz也是合法的,尽管它并不漂亮。那么最初的问题就变得简单了:TrueisFalseisFalse等价于(TrueisFalse)和(FalseisFalse)结果自然是False。相信,现在你已经了解了以下现象:>>>1in[0,1]==TrueFalse>>>notTruein[True,False]False那么,我将分享链操作应用的好例子和坏例子。很好的例子,一目了然:if0=y>=1:print("yinrange[1,x]")ifx==y==z:print("x,y,zallequal")坏例如,未知所以说。我们应该避免这样写:ifxz:print("y>max(x,z)")ifx!=y!=z:print("kindalookslikex,y,zalldistinct,butmayhax==z")if0>x1:print("WHY??")if01>>y<<11:print("pleaseremovethisfromthelanguage")用法没问题,但可能有疑问,类似文章开头的例子,尽量避免:if0