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

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

摄影:产品经理剥壳:kingname

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

假设有这样一个例子:

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

例如:

输入:{'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 isNoneor print(f'{k}={target[k]}')

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

def referer_dict(target, keys):
    for k in keys:
        k notin 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 代码,本身就是最好的文档,连注释都不需要就能让人理解。

目录
相关文章
|
Java
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
249 0
|
算法 测试技术 C++
C++算法 通配符匹配
C++算法 通配符匹配
|
11月前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第16天】进程、线程和协程是计算机程序执行的三种基本形式。进程是操作系统资源分配和调度的基本单位,具有独立的内存空间,稳定性高但资源消耗大。线程是进程内的执行单元,共享内存,轻量级且并发性好,但同步复杂。协程是用户态的轻量级调度单位,适用于高并发和IO密集型任务,资源消耗最小,但不支持多核并行。
199 1
|
网络协议 JavaScript 前端开发
WebSocket:实现客户端与服务器实时通信的技术
WebSocket:实现客户端与服务器实时通信的技术
bootstrap+fileinput插件实现可预览上传照片功能
bootstrap+fileinput插件实现可预览上传照片功能
250 0
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
190 2
【前端学java】如何从前端视角快速学习Maven
|
存储 Linux C语言
【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架(一)
【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架(一)
322 0
|
XML 传感器 测试技术
GIGE 协议摘录 —— 照相机的标准特征列表(五)
GIGE 协议摘录 —— 照相机的标准特征列表(五)
220 2
|
存储 JSON OLAP
Hologres支持哪些数据格式?
【8月更文挑战第20天】Hologres支持哪些数据格式?
357 1