结论:
if
后的多个条件依次判断,遇到不符合的条件后直接跳转到else
,不在执行之后的条件.
如下代码# 1
中,如果 tiaojian1() == False
, 做完该判断,获取到false后,直接进入到else
环节.
if后面条件的写法:
- 用
and
,or
,not
,()
来链接各个条件 - 用
any([])
,all([])
等方法来判断多个条件 - 直接跟一个对象,判断对象是否是空
具体使用哪一个,需要看具体逻辑和场景需要.
def tiaojian1(r=True):
print('tiaojian1',r)
return r
def tiaojian2(r=True):
print('tiaojian2',r)
return r
def tiaojian3(r=True):
print('tiaojian3',r)
return r
f=False
# 1
print('# 1','-'*10)
if tiaojian1(False) and tiaojian2() and tiaojian3():
print('all True')
else:
print('one false')
# 2
print('# 2','-'*10)
if all([tiaojian1() ,tiaojian2(False) ,tiaojian3()]):
print('all True')
else:
print('one false')
# 3
print('# 3','-'*10)
a_obj = [0]
if a_obj:
# 1, ' ', [[]], [0], set([0]), {None:None} 这些看着空实际都是被if判断为True的
print('a_obj not None')
else:
# 0, '', [], set(), {}, dict() 只有这种才能判断为False
print('a_obj is None or empty or 0')
# 自定义类
class a(object):
key=None
a_obj = a()
print(a_obj, a_obj.key)
if a_obj:
# 1, ' ', [[]], [0], set([0]), {None:None} 这些看着空实际都是被if判断为True的
print('a_obj not None')
else:
# 0, '', [], set(), {}, dict() 只有这种才能判断为False
print('a_obj is None or empty or 0')
>>>
# 1 ----------
tiaojian1 False
one false
# 2 ----------
tiaojian1 True
tiaojian2 False
tiaojian3 True
one false
# 3 ----------
a_obj not None
<__main__.a object at 0x7f9fb56d0f60> None
a_obj not None