• 第4条:用辅助函数来取代复杂的表达式


    Python的语法非常精炼,很容易用一行表达式来实现许多逻辑,但是很多时候这样会导致代码的可读性降低,此时使用辅助函数会让代码保持灵动性。

    >>> my_values = {'red':['5'],'green':[''],'blue':['0']}

    现在有一个字典,我们想从中取值:

    >>> print('Red:',my_values.get('red'))
    Red: ['5']
    >>> print('Green:',my_values.get('green'))
    Green: ['']
    >>> print('Opacity:',my_values.get('opacity'))
    Opacity: None   #值不存在返回空值

    取值的结果在我们的意料之内,但是,我想让它只返回数字,没有值或者空值返回0,那该如何解决了,有的同学临机一动:

    #这样不就行了,呵呵
    >>> red = my_values.get('red',[''])[0] or 0
    >>> green = my_values.get('green',[''])[0] or 0
    >>> opacity = my_values.get('opacity',[''])[0] or 0

    我们来看一下结果:

    #没毛病,大兄弟
    >>> print('Red:%r' % red )
    Red:'5'
    >>> print('Green:%r' % green )
    Green:0
    >>> print('opacity:%r' % opacity )
    opacity:0

    虽然解决了问题,但是我觉得有两个问题:

    首先,每次取值难道都要重新进行赋值,如果要取1000次,这个工作也许就会变得沉重;

    其次,难道你不觉的看“my_values.get('green',[''])[0] or 0”你的眼睛不花,这说明代码的可读性不强。

    那该怎么办了?

    它的取值只可能是['数字']、['']或者None,而我们要数字,我们在结果打印出来之前,把结果加工一下,要么数字要么0,这样不久行了!

    实现的过程:

    >>> def get_first_int(values,key,default=0):
    ...     found = values.get(key,[''])
    ...     if found[0]:
    ...         found = int(found[0])
    ...     else:
    ...         found = default
    ...     return found
    ... 

    查看一下结果:

    >>> red = get_first_int(my_values,'red')
    >>> print(red)
    5
    >>> opacity = get_first_int(my_values,'opacity')
    >>> print(opacity)
    0
    >>> green = get_first_int(my_values,'green')
    >>> print(green)
    0
    #没毛病

    调用这个辅助函数时所使用的代码,要比使用or操作符的长表达式版本更加清晰。

    所以,如果表达式变得复杂,那就应该考虑将其拆成小块,并把这些逻辑移入辅助函数中。

    这会让代码更加易读,也比原来那种密集的写法更好。编写python程序时,不要一味追求过于紧凑的写法,那样会写出非常复杂的表达式。

    也许刚开始的时候这种思维方式你有点不习惯,相信我,只要你习惯了你会爱上它。

     文章摘抄于Brett Slatkin的《编写高质量Python代码的59个有效方法》,仅作为个人学习使用,如有侵权请告知,将及时删除,如果觉得有益,请购买原版书籍,知识需要传递和支持,谢谢。 
  • 相关阅读:
    GOOGLE's Olympics Symbols
    写在九月的第一篇
    有点沉重的topic:出国,考研,工作?
    放弃的选择
    面临选择
    中秋节快乐!
    我该做一些改变
    使用Docker搭建一个WordPress博客
    三层架构小示例
    SQL联合查询
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7990541.html
Copyright © 2020-2023  润新知