该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这东西在每一个语言都有,and or not 对应与、或、非三种逻辑运算;True和False是bool值,即真和假。

逻辑运算和布尔值经常用于if判断语句、循环语句的条件语句。

首先作为控制条件应该是一个布尔值,即真和假——True和false。

python的内置类——布尔类,只有两个实例:True和false。对于一般数字而言,0是False,非0是True;对于序列和容器类型,如列表、字典、字符串等,空为False,非空为True。

所以就有了这样的用法:

-------------------------
if 1:
print("1 为True")
输出:1 为True
------------------------
if 0:
print("不会进入这个分支")
else:
print("0 为 False")
输出: 0 为 False

------------------------

a = '字符串'
b = '' # 空字符
if a:
print("a = ",a)
elif b:
print("b 为空,不会有输出")
else:
print("因为a非空,这里不会输出")
输出:a = '字符串'

这了可以看出一个实例本身可以作为控制条件,这是因为,解释器会先把这个实例转换为bool类型,然后根据这个bool类型执行程序。即bool(a) = True、bool(b) = False。

但是只用这样的方式控制程序显然不够,比如我希望a为空,b为非空的时候,我输出“我天下第一”,这怎么办?

如果不用not and or 就会写成这样:

-------------------------

a = "" # 空字符
b = '非空'
if a:
pass # a 为空,不会进来执行
else:
# 这里是a 为空的情况
if b:
print("我天下第一")
else:
pass

输出:我天下第一

可以把a 看成False,b看成True。

从这里我们可以看到,我们用了两层if--else语句来判断a为空,b为非空的情况,那么我用逻辑运算法呢?

--------------------------

a = ""
b = '非空' # 空字符
if not a and b:
print("我天下第一")
输出:我天下第一

一样的:可以把a 看成False,b看成True。那么not a and b的意思就是:not False and True

这时候就是逻辑运算符的优先级的问题,这可以借鉴C语言的那本书《C程序设计》第五版的第92页

----------------

!非

算数运算符

关系运算符

&& 和 ||

赋值运算符

----------------

运算优先级从上到下,越来越低。

这是C语言里的,在python里就是:

not 高

and 和 or 低

所以我们先算not

于是 not False and True 就成所以了True and True这就很清楚了结果为True,所以“我天下第一”。

所以我们就可以总结出:

1.先将实例变为布尔值

2.在计算所有的not

3.根据语言特性,从左到右或者从右到左计算逻辑运算结果。

当然在python中是从左到右。

catuion!!!!

and 和 or 运算具有短路保护!什么意思呢?看一个栗子

---------------------

1 or a

or的左边是1也就是True,根据or的运算法则,只要有一个真则为真,所以不管a是真还是假,结果都是真。

---------------------

0 and a

and 左边为0,为False,同样,and只要有一个为假则为假,所以不管a是真还是假,结果都是假。

所以and 和 or 的结果可以根据第一个操作数的值来确定,那么他就不会对第二个操作数进行运算。

这个功能用起来要很小心,不然很可能会出现想不到的结果。

+++分割线+++++++++++++++++++++++++++++++++++++++++

以上均为我的拙见,希望对你有帮助。辛辛苦苦打的。不是复制来的,不过我觉得自己写的不错,所以打算明天放到自己的简书上。______DKider