Python中(x < y and [x] or [y])[0] 实现什么样的功能?
(x < y and or ) 实现什么样的功能?有无栗子可举,谢谢宁!
https://z3.ax1x.com/2021/04/30/gAEoWj.png 按照逻辑短路法则往里套呗
目测是x<y返回一个值,否则返回另一个值 本帖最后由 洋洋痒 于 2021-4-30 06:45 编辑
首先呢,和肯定是为真的,因为这是两个列表,只要不为空就是True
然后呢,如果x<y为真,x < y and or 结果就是也就是x短路逻辑 True and 结果是,是True,or后边就不看了
如果x<y为假,x < y and or 结果就是也就是y False and True为False ,然后再or ,结果就是
结论,功能就是返回x,y两个数中比较小的一个数 洋洋痒 发表于 2021-4-29 17:44
首先呢,和肯定是为真的,因为这是两个列表,只要不为空就是True
然后呢,如果x
我不太理解和这两个东西 能麻烦宁再讲讲吗www
还有就是不太理解下面两句 能麻烦宁在细讲讲吗 谢谢宁!
如果x<y为真,x < y and or 结果就是也就是x
如果x<y为假,x < y and or 结果就是也就是y
## (x < y and or )
##
## 举例说明 :
##
## x = 1
##
## y = 2
##
## ==
##
## ==
##
## bool() == bool() == True
##
## bool() == bool() == True
##
## 事实上,只要是 类型 bool() 就一定是 True
##
## 因为 lst = 这个列表中一定 一定包含有元素
##
## 哪怕 x == None 结果依然是 bool() == True
##
## 所以原式中只需要判断 x < y 为 True 或者 False
##
## 如果 x < y 为 True
##
## 原式就变成了
##
## (True and or ) ==> ==> x
##
## 如果 x < y 为 False
##
## 原式就变成了
##
## (False and or ) ==> ==> y
本帖最后由 阿奇_o 于 2021-4-30 10:34 编辑
Judie 发表于 2021-4-30 09:22
我不太理解和这两个东西 能麻烦宁再讲讲吗www
还有就是不太理解下面两句 能麻烦宁在细讲讲吗 谢谢 ...
and 与逻辑,是 若前一个表达式为True,才会执行 and后面的一个表达式。
or 或逻辑,是 只有前面的所有表达式为False时,才会去执行 or后面的一个表示。
In : a, b = 1, 2
In : (a > b and or )#a>b为 假,故跳过and后的不执行,而执行or后的,所以结果为,是列表。
#(若反过来,a > b 为真,会接着执行and后的,然后两者都为真,则or后的表达式,就不执行了 )
Out:
In : (a > b and or )#从列表里取出2 (即b的值)
Out: 2
要不要听“更复杂的解释”?—— 从 运算符的优先级 来看计算机到底是怎么计算的?
在(a > b and or )[]这里的运算符有 小括号()、索引运算符[]、比较运算符 >,逻辑运算符and和or
小括号优先级别最高,故先计算小括号里的表达式——a>b and or 这一表达式中,因为 比较运算符 大于号,优先于逻辑运算符,故先运行;
然后,and的优先级高于or的优先级,故先执行and,但因为and逻辑与,有其“短路逻辑”,
即 and的前后,只要前面的有一个为假,它就不会再执行其后一个表达式( 比如 False and 1+1 and 1-1 因为第一个就为假,后面的就不再执行了)。
所以,or只有在a>b为假时,它才会被执行(这里刚好是 1>2 为假,故会执行or后的,而不是and后的)。
于是 小括号里的运算结果为 ,即 ,是一个列表(且只有一个元素,下标/索引为0)。
于是,再使用索引运算符[],取它的第一个元素,即 ,最终结果 即为 2.
Judie 发表于 2021-4-30 09:22
我不太理解和这两个东西 能麻烦宁再讲讲吗www
还有就是不太理解下面两句 能麻烦宁在细讲讲吗 谢谢 ...
就是一个列表,里边只有一个元素x
表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。若 or 的左侧逻辑值为 False ,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。若 and 的左侧逻辑值为 True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。
所以x<y为真时候,x < y and or 就是True and or 若 and 的左侧逻辑值为 True,则输出其后的表达式。即为再在后边加个,意思就是列表的第一个元素,即为x
下边那个也用短路逻辑带一下你就懂了
页:
[1]