前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python90-5 使用辅助函数替代复杂表达式

Python90-5 使用辅助函数替代复杂表达式

作者头像
一只大鸽子
发布2022-12-06 09:26:01
2510
发布2022-12-06 09:26:01
举报
文章被收录于专栏:Python基础、进阶与实战

第5条:使用辅助函数替代复杂表达式

Item 5: Write Helper Functions Instead of Complex Expressions

Python的简洁语法允许使用简单的一行表达式来实现复杂操作。例如,我想解码从URL获取的query string。

代码语言:javascript
复制
from urllib.parse import parse_qs
my_values = parse_qs('red=5&blue=0&green=',
                     keep_blank_values=True)
print(repr(my_values))
代码语言:javascript
复制
output:
{'red': ['5'], 'blue': ['0'], 'green': ['']}

有的query string 参数可能有多个值,有些有单个值,有的是空缺。使用get方法得到字典。

代码语言:javascript
复制
print('Red:     ', my_values.get('red'))
print('Green:   ', my_values.get('green'))
print('Opacity: ', my_values.get('opacity'))

如果当参数不存在或者空白时将默认值设置为0会非常有用。这可以用or来实现。当or前面为False时,返回后面值。

代码语言:javascript
复制
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(f'Red:     {red!r}')
print(f'Green:   {green!r}')
print(f'Opacity: {opacity!r}')
代码语言:javascript
复制
output:
Red:     '5'
Green:   0
Opacity: 0

但是这还不够合适,我要把值转换成int以便进行数学计算。于是我用int将其包裹。

代码语言:javascript
复制
red = int(my_values.get('red', [''])[0] or 0)

看起很难读。我们将它拆开成两部分。

代码语言:javascript
复制
red_str = my_values.get('red', [''])
red = int(red_str[0]) if red_str[0] else 0

看起来清晰多了。将if-else展开的话:

代码语言:javascript
复制
green_str = my_values.get('green', [''])
if green_str[0]:
    green = int(green_str[0])
else:
    green = 0

如果你需要多次重复该操作,即使只有两三次,写一个helper函数很有帮助。

代码语言:javascript
复制
def get_first_int(values, key, default=0):
    found = values.get(key, [''])
    if found[0]:
        return int(found[0])
    return default

#调用变得清晰
green = get_first_int(my_values, 'green')

当表达式复杂起来时,就要考虑拆分到更小的部分并把逻辑移动到helper函数。不要因为Python的简洁语法使你陷入复杂表达式。

遵循DRY原则:Don't repeat yourself。

Things to Remember

  • • Pyhon的语法很容易写出单行复杂的表达式。但是阅读困难。
  • • 移动复杂表达式到helper函数中,尤其是你需要多次使用时。
  • • 和句内的or、and相比,if/else提供更好的可读性·
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一只大鸽子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第5条:使用辅助函数替代复杂表达式
  • Item 5: Write Helper Functions Instead of Complex Expressions
    • Things to Remember
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档