|
本帖最后由 Shawn赵瑞翔 于 2-26-2025 22:00 编辑
近日在学生群里面看见了个很有意思的问题
就是在idle里面输入
2 and 3
输出的是3
而 输入 3 and 2 输出的是2
这是为什么呢
很快就有大佬回复说因为python的and语句是判断左右两个东西是否都是True,如果是,则返回True,反之返回false
而非按位与,因此两边都是true返回右边那项
那么python的判断True false的机制究竟是什么?and, or的语句返回值代表了什么?
1,TF判定
在python中,除了最简单的return True, return False可以直接表达TF以外,其他泛型也可以
一般来说一个空集便可以表达False,而有元素的就会返回True
例如:()、[],‘’,都可以表达False,而(-1), (''), [114514,666,'演都不演了']都是True,因为他们都有元素
也就是对于以上三种类型的数据,若其长度为0,则会返回false
这在一些程序里面也非常常用,因为省字数,比如while (mem): m = mem.pop(0) ....
还有就是0
相信大家都用过一个变量,名字叫做flg(flag),在for 循环中经常用来判定是否需要break. 那么我们的flg一般只在0,1中取值,或者有flg = 1 - flg 的操作
这是为什么呢?显然不只是因为二进制好看,而是因为只需要1和0就可以简单地判定flg是否是True了
对于int 类型的数据,除了0以外,其他所有数值都是True。所以程序中 if flag 就可以用一个integer简单明了地让python理解flag的TF,将flg作为int的好处也是因为可以直接进行运算,如flg = 1 -flg
那么这个TF 判定的应用有什么呢:
省字数,if 后面不需要加 什么什么等于0,什么什么等于空,而直接 if (变量名)
2,and/ or的逻辑和返回值
就像学生群里的大佬所说
and的逻辑就是 left == True 且 right == True ->True
这很好理解
if a and b: ->a和b都是真的吗
那么python是怎么运算这个and 的代码呢?
从左到右编译
if a == True:#如果左边是真的
return b#其实就是说:如果a是真的,那么a and b是不是真的就取决于b是不是真的,而python通过上述的TF判定可以判断出b是不是真的
return a# 既然没有return,那么说明 a是假的。a都是假的了,那a and b 肯定是假的,所以return a,python 通过上述TF判定判定出其是假的
所以对于 2 and 3:2是真的->return 3 3 and 2:3是真的->return 2
对于 '' and 1 :因为''是假的,直接 return '' 对于 1 and [],1是真的,return []
如此,python只需要一个判断语句就可以来编译一个and 语句
or的逻辑就是 left == False 且 right == False ->False
所以和and的编译恰恰相反
if a == False:
return b #只有a是假的时候,b的真假对 or的结果判定才有意义
return a #a直接真的了,那or一定就是真的
因此,对于idle的输出
0 or 1: 0是假的,所以输出1 1 or 0: 1是真的直接输出1
'' or 0: ''是假的,输出 0 0 or '': 0是假的,输出''
同样用一个判断语句编译一个or语句
|
|