每日10行代码52:编写高质量python代码方法4——用辅助函数来取代复杂的表达式

今天看了effective python(中文名:编写高质量python代码的59个有效方法)第4条,有所启发,具体代码是:

from urllib.parse import parse_qs
# 要从url中解码查询字符串,在下例中,每个参数表示一个整数值:
my_values = parse_qs('red=5&blue=0&green=',keep_blank_values=True)
print(my_values)
print(repr(my_values))
print('Red:    ',my_values.get('red'))
print('Green:  ',my_values.get('green'))
print('Opacity:',my_values.get('opacity'))


#如果有一个需求要实现,当参数返回空白时或者没有传此参数时能够返回默认值0,那么可以如下实现
#实现原理: 如果or操作符左侧的子表达式估值为False,那么整个表达式的值就是or操作右侧那个子表达式的值
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)
print('Green:    %r' % green)
print('Opacity:  %r' % opacity)

#假如所需的参数值是数字,上面的的表达式还要换一下
red = int(my_values.get('red', [''])[0] or 0)   # 这个表达式就很复杂了

# 如果用上三元操作符,可以如下写:
red = my_values.get('red', [''])
red = int(red[0]) if red[0] else 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)

要点:

  1. 开发者很容易过度运用python的语法特性,从而写出那种特别复杂并且难以理解的单行表达式。
  2. 请把复杂的表达式移入辅助函数之中,如果要反复使用相同的逻辑,那就更应该这么做。
  3. 使用if/else表达式(三元操作符),要比用or或and 这样的boolean操作符写成的表达式更加清晰。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值