python技巧分享(六)

作者: songleo | 来源:发表于2018-02-07 21:26 被阅读183次

    这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。

    1 正确的函数返回

    • 不推荐方式
    def divide(a, b):
        if b != 0:
            return a * 1.0 / b
    
    
    print divide(1, 0)
    # None
    print divide(0, 1)
    # 0.0
    
    • 推荐方式
    def divide(a, b):
        try:
            return a * 1.0 / b
        except ZeroDivisionError as e:
            raise e
    
    
    print divide(0, 1)
    # 0.0
    print divide(1, 0)
    # ZeroDivisionError: float division by zero
    

    前一种方式中,如果输入的参数b为0,函数会默认返回None,这是一个不太好的编程习惯。例如,当把函数的返回值作为if条件判断时,0.0和None都是False,这样容易导致bug。后面这种方式,将除数是0当成异常抛出,让调用者处理异常,是比较合理的做法。

    2 正确使用函数默认参数

    • 不推荐方式
    def gen_list(a=[], b=None):
        a.append(b)
        return a
    
    
    print gen_list(b=2)
    # [2]
    print gen_list(b=3)
    # [2, 3]
    
    • 推荐方式
    def gen_list(a=None, b=None):
        if a is None:
            a = []
        a.append(b)
        return a
    
    
    print gen_list(b=2)
    # [2]
    print gen_list(b=3)
    # [3]
    

    前一种方式会导致函数默认值改变,多次调用相互影响。正确方式是将函数默认值设置成None,在函数内部初始化默认参数。这里只是针对传递引用类型的参数,如果是数字、字符串等类型就不存在该问题。

    3 利用元组传递多个函数参数

    • 推荐方式
    def demo(a, b, c, d):
        print a, b, c, d
    
    
    args = (1, 2, 3, 4)
    demo(*args)
    # 1 2 3 4
    

    利用python的可变参数特性,可以通过元组传递多个参数,实现参数的“打包式”传递。

    相关文章

      网友评论

      • 梅花鹿数据rieuse:看完了六次分享有收获,感谢您的分享。
        songleo:@rieuse 有收获就好,后续还会有,都是我工作中遇到或者看书学到的,谢谢。
      • 小小运维:其实python2已经不太推荐了,print()
        songleo:@小小运维 我工作需要python 2,我下次尽量考虑兼容性,谢谢提醒。

      本文标题:python技巧分享(六)

      本文链接:https://www.haomeiwen.com/subject/enaazxtx.html