一日一技:你的代码是如何被炫技毁掉的
【摘要】 保持 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)