写好Python之If语句


避免将分支代码放在冒后后相同行
使用缩进来区分作用域(和你在Python其他地方一样)更容易判断条件所要执行的部分。if, elif, 和else里语句应该总是在新行。不应该将代码跟在:后。
 
糟糕的
name = 'Aidan'
address = 'GuangDong, ShenZhen'
 
if name: print(name)
print(address
推荐的
name = 'Aidan'
address = 'GuangDong, ShenZhen'
 
if name: 
    print(name)
print(address
避免在If语言中重复出现变量
当你想检查变量是否为一系列值时,重复检查该值是不必的冗长。使用iterable(迭代)让代码更简单,并具有可读性
 
糟糕的
is_generic_name = False
name = 'Tom'
 
if name == 'Tom' or name == 'Dick' or name == 'Harry':
    is_generic_name = True
推荐的
name = 'Tom'
is_generic_name = name in ('Tom', 'Dick', 'Harry')
避免直接True, False, 或None进行比较
对于任何对象,内建还是用户定义,都具有相关的布尔特性,当检查一个条件是否为真时,如果不是在语句中严格判断其对象布尔特性,判断规则有点让人奇怪。以下将被视为False:
 
None
False
数值0
空序列
空字典
对象方法_len或_nonzore返回值为0或者False
除了这些其他都会视为True(或隐示为True)。最后的条件是通过检查对象的len或nonzero,来判断布尔值。
 
if语句中隐示使用布尔值,你应该不使用:
 
if foo == True:
简单使用 if foo:.
 
有几个原因。最首要的是当foo变为int类型时,if语句仍然有效。更深层的原因在于equality和indentity。使用==判断两个对象爱嗯是否是相同值(_eq属性)。使用is来判断两个对象是否时相同对象。
 
在判断中,避免直接与False和None或者空序列(例如:[], {})进行比较。如果my_lists是个空列表,使用if mylist: 将返回False
 
有时,虽不推荐和None进行直接比较,但有时又时必须的。函数检查某个参数默认值是否None,例如:
 
def insert_value(value, position=None):
    """INserts a value into my container, optionally at the
    specified position"""
    if position is not None:
        ...
这里if position:?做了什么呢,当有人想插入到指定0位置,当函数没有设置position参数,由于0等于False,我们就使用is 或is not来进行None比较, 而不是 ==.
 
糟糕的
def number_of_evil_robots_attacking():
    reutrn 10
 
def should_raise_shields():
    # "We only raise Shields when one or more giant robots attack,
    # so I can just return that value..."
    return number_of_evil_robots_attacking()
 
if should_raise_shields() == True:
    raise_shields()
    print("Shields raised")  
else:
    print("Safe! No giant orbots attacking")
推荐的
def number_of_evil_robots_attacking():
    reutrn 10
 
def should_raise_shields():
    # "We only raise Shields when one or more giant robots attack,
    # so I can just return that value..."
    return number_of_evil_robots_attacking()
 
if should_raise_shields():
    raise_shields()
    print("Shields raised")  
else:
    print("Safe! No giant orbots attacking")

评论关闭