为了账号安全,请及时绑定邮箱和手机立即绑定

关于python短路运算的小问题

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() and g() or h():

    print "OK"

为什么返回是的A E F G H OK

而不是 A E F H OK

正在回答

2 回答

总的来说,这种不清不楚的执行顺序问题,我们考虑的是多加括号...不然写奇奇怪怪的代码容易被打死

短路是这样的,

  1. f1 and f2 and f3, 当出现第一个 false 后,后面的and 就不走

  2. f1 or f2 or f3,当出现第一个 true 后,后面的 or 就不走

综上,我们不管 输不输出 ok,先看走的顺序:

a() and b() and c() and d() or e() and f() and g() or h():

从做到右,a() 为false,则 bcd不走,到达e()为true, 后面没有 or,所以f()走,f为true所以g()要走, 后面为 or 所以 h()要走, 

即输出为: AEFGH


0 回复 有任何疑惑可以回复我~
#1

love__study 提问者

非常感谢!
2018-08-23 回复 有任何疑惑可以回复我~

是不是这样理解, f()的返回值是false,所以造成不了短路,所以f() or h()返回值不管是ture 还是 false,都会显示出来。。

是这样的理解吗?

0 回复 有任何疑惑可以回复我~
#1

love__study 提问者

刚才思考了下,似乎也不对。f()的返回值是ture 所以造成不了短路,f() and g()的结果主要看g()的返回值,所以结果取g(),而同样g() and h()的返回值主要看h,所以取h的值。 刚刚上面的写错了,不是“f() or h()”而是“g() or h()” 不知道我想的对不对
2018-08-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

关于python短路运算的小问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信