|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#代码:
def a():
print('A')
return []
def b():
print ('B')
return []
def c():
print ('C')
return 1
def d():
print ('D')
return []
def e():
print ('E')
return 1
def f():
print('F')
return 1
def g():
print('G')
return []
def h():
print ('H')
return 1
if a() and b() and c() and d() or e() and f() or g() and h():
print ('ok')
#输出结果如下:
A
E
F
ok
#解析:
别以为语句很长就很难,我们好好分析一下,从左至右,首先a() 的逻辑值为 False,其后到 or 语句为止有三个 and 语句: a() and b() and c() and d(),均被短路。只输出 a(), 得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。最终只打印了A E F ok 。
#疑问
为何没有考虑到优先级问题
(a() and b() and c() and d() ) or (e() and f() ) or (g() and h())
如何考虑优先问题 输入的结果应该是:
A
F
G
ok
#逻辑
(a() and b() and c() and d() )输出A后逻辑短路
(e() and f() ) Ture and Ture 输出F
(g() and h())输出G
0 or 1 or 0 == 1 输出ok
同理 课后习题6后课题:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
如果不考虑优先级应该是9吧
但是考虑优先级 ,结果输出的是4
请问这里的优先级and or 为何要考虑?
这里考虑优先级了,当执行函数返回[]会判定为False
其实python没有你想象的那么智能,它从左往右执行a()执行了一次函数,所以print(A)就打印A了,但是执行结果是[],and后面的bcd也就不会执行了,也就是or前面全部判断为False,所以or后面的语句就会被执行。e()和f()因为e返回TURE,and后面的f()就会执行,因为e()andf()判断为Ture,所以根据or的短路逻辑,第二个or后面的语句就不会执行了
手机打这么多字真费劲
|
|