一日一技:你的代码是如何被炫技毁掉的

举报
未闻Code 发表于 2022/02/15 10:27:11 2022/02/15
【摘要】 保持 Python 的自文档性,优秀的 Python 代码,本身就是最好的文档,连注释都不需要就能让人理解。

你的代码是如何被炫技毁掉的?

假设有这样一个例子:

一个函数接收两个参数,第一个参数为一个字典,第二个参数为一个列表,我们要把列表中的每一个元素去查字典,如果能够查询到,那么就获取值,如果不能查询到,就跳过。

例如:

输入:{'a': 1, 'b': 2, 'c': 3}  ['a', 'd', 'c'],那么打印:

a=1
c=3

我们可能会这样写代码:

def referer_dict(target, keys):
    for k in keys:
        if k in target:
            print(f'{k}={target[k]}')

那么有没有可能把判断k是否在 target这个操作去掉呢?也可以:

def referer_dict(target, keys):
    for k in keys:
        values = target.get(k, None)
        values is None or print(f'{k}={target[k]}')

但这种写法实际上并没有节省代码行数,不如这样改:

def referer_dict(target, keys):
    for k in keys:
        k not in target or print(f'{k}={target[k]}')

接下来还可以继续优化成一行代码:

def referer_dict(target, keys):
    [print(f'{k}={target[k]}') for k in keys if k in target]

停。

再这样魔改下去这个函数都可以去掉。总共只需要1行代码。但是这样炫技并不可取。代码可读性和可维护性比炫技重要一万倍。

第四种写法,纯粹就是为了凑出这个打印结果而强行使用了列表推导式,毫无可读性,别人接手这个代码也难以维护。

保持 Python 的自文档性,优秀的 Python 代码,本身就是最好的文档,连注释都不需要就能让人理解。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。