编码的一个重要因素的是让读代码的人是否容易理解,而不是只考虑结果的正确性。所以代码中提供恰到好处的信息以帮助维护与阅读代码的人理解代码。

    列表推导与循环
    列表推导能够让人清晰理解语句的功能是生成一个列表:

    1. ls = [[1, 2], [-2, 5], [0, 3], [9, 22]]
    2. new_ls = []
    3. for x in ls:
    4. if x[0] > 0:
    5. new_ls.append(x[1])
    6. print(new_ls)

    使用列表推导式完成,只用3行语句,且读者明确这是根据某条件对可迭代对象进行一个结构的调整,且结果一定是一个列表。

    1. ls = [[1, 2], [-2, 5], [0, 3], [9, 22]]
    2. new_ls = [x[1] for x in ls if x[0] > 0]
    3. print(new_ls) # [2, 22]

    推导式中的可迭代对象不要太复杂,以避免抛出异常时无法准确定位问题所在。

    lambda表达式与具名函数
    lambda不要滥用,一般仅用于单返回值时且只有一次调用时,尽量不用lambda嵌套,以避免让代代码晦涩难懂。复杂的函数一定要明确定义为具名函数,以使阅读代码的人明确知道代码的功能,也可以使用较复杂的逻辑,出现异常时也容易定位问题位置。

    代码规范

    1. import random
    2. def add_number(num,min_num,max_num):
    3. data = []
    4. for i in range(num):
    5. x = random.randint(min_num,max_num)
    6. data.append(x)
    7. result = 0
    8. for n in data:
    9. result = result + n
    10. return result
    11. if __name__ == '__main__':
    12. print(add_number(100,100,10000))

    规范化后,用空两行表示分段,空一行表示一件事情结束,使代码的阅读更加舒适愉悦。

    1. import random
    2. def add_number(num, min_num, max_num):
    3. data = []
    4. for i in range(num):
    5. x = random.randint(min_num, max_num)
    6. data.append(x)
    7. result = 0
    8. for n in data:
    9. result = result + n
    10. return result
    11. if __name__ == '__main__':
    12. print(add_number(100, 100, 10000))

    保证代码可读性的前提下,代码尽可能短小

    1. import random
    2. def add_number(num, min_num, max_num):
    3. data = [random.randint(min_num, max_num) for i in range(num)]
    4. result = sum(data)
    5. return result
    6. if __name__ == '__main__':
    7. print(add_number(100, 100, 10000))

    **