上一章讲了,阅读代码是学习算法过程中非常重要的一环。本章我们就来讲讲阅读代码的方法,并一起来读一个源码的例子。

如何阅读代码

读一个函数/代码块

其实,前面我们对于如何阅读理解一个程序中的函数或是代码块,已经说了不少。可以用“人肉计算机”法——自己拟定一个测试数据,人肉运行一遍;还可以用打印法辅助——程序中加入打印语句,打印变量的中间结果。

这个方法对于所有程序都是通用的。不过如果程序稍大,涉及到的函数不止一个,且函数之间有了嵌套调用的关系,那么只靠模拟运行,就有点困难了。

基于代码结构理解代码功能

阅读代码,需要先构造出代码的结构,然后基于结构理解其功能。

具体的做法分三步:

  1. 从程序入口点开始,推导出其中函数的层层调用过程;

  2. 从最小粒度的函数(我们姑且认为函数体中调用其他自定义函数越少的函数粒度越小)开始,搞清楚每一个函数具体的功能和时空复杂度;

  3. 层层递进,逐步推导出全局的完整过程和整体时空复杂度。

边看边学编程语言

在阅读的过程中,可能会看到一些自己完全不明就里的程序语句:也许是之前没见过的关键字;也可能是该句中调用了某个之前不知道的 Python 内置函数或者从其他支持库 import 进来的函数;也可能是某种表达方式之前没有见过……遇到这些情况怎么办呢?

当然,如果你习惯于买一本 Python 的入门书籍(比如下面这本),然后一点点阅读每一个章节,并且把读过的内容都记下来。那么相信,应该没有什么 Python 的语言问题能够难倒你

遇到读不懂的代码应该怎么办?相关推荐

  1. 如何快速读懂开源代码?

    文章目录 **RUN起来** **调试** **把控关键数据结构和函数** **从小的开始** **关注一个模块** **工具** **一.阅读开源代码存在的一些误区** 二.阅读代码的心态 **三. ...

  2. 写让别人能读懂的代码

    随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本.而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的代码. 我前几天看了一本书,书中有 ...

  3. react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧

    react 代码编写原则 by Nirmalya Ghosh 由Nirmalya Ghosh 如何编写易读的React代码- 10种编码风格技巧 (How to write highly readab ...

  4. 编写让别人能够读懂的代码

    随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本.而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的时间. 我前几天看了一本书,书中有 ...

  5. NO.119 不懂语言代码,超级菜鸟的建站分享(二):界面设置。

    为什么80%的码农都做不了架构师?>>>    上一篇主要是跟大家分享了注册购买域名,解析以及使用蝉知免费CMS搭建自己个人网站的详细过程. 不懂语言代码,超级菜鸟的建站分享(一): ...

  6. 为何“看得懂单词却读不懂句子”

    开门见山直奔主题,来,翻译一下下面的话(全部初中词汇,仅从单词角度来说,不难吧): A person is a person through other persons. 怎么样?是不是很难翻译(即使 ...

  7. 读代码读的什么代码_您的代码应读得像书

    读代码读的什么代码 There's a pandemic among programmers. Long functions, broad and nondescriptive names for f ...

  8. 如何编写让别人能读懂的代码?

    随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本.而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的代码. 我前几天看了一本书,书中有 ...

  9. 11月14日云栖精选夜读 | 动画+原理+代码,解读十大经典排序算法

    排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过 ...

最新文章

  1. saas模式与国家的产业政策
  2. sqlplus 自动换行_sqlplus常用操作命令2
  3. RestartOnCrash一个监控进程的小工具,可用于监控iis/apache/mysql等程序
  4. Unity高管:深耕游戏、VR/AR,致力为开发者提供极致体验
  5. 第二十七讲 DataSet和XML
  6. 【Java考试】易错知识点,期末考试踩坑题
  7. 什么时候使用PD和PI——基于平衡小车分析
  8. 当当购书额外优惠,还有想看的书未入手?这次不要再错过了!
  9. 客户关系管理系统的三个不同阶段
  10. 【转】阿里云主机购买使用教程
  11. CAST和CONVERT
  12. XSS与字符编码的那些事儿
  13. dataTables -- ajax 分页基本使用
  14. 钢笔墨水能否代替打印机墨水_uv打印机喷头波形和墨水关系
  15. anki怎么设置学习计划_Anki:用这套记忆卡片,学习一切你背不下来的知识 #iOS #Android #PC...
  16. 【Unity3D实战】RPG黑暗之光Scene1:创建开始场景
  17. php 定时采集数据,懒人一键采集(采集+推送+定时)
  18. 为什么要配置环境变量
  19. PAT A1155 Heap Paths ——三更灯火五更鸡?
  20. 自学FPGA:Verilog基本语法规则(一)

热门文章

  1. 小程序幻灯片组件swiper使用。
  2. WordPress采集-网站采集发布好帮手
  3. Cisco考试再认证常见疑难问题解答
  4. PHP - 底层/内核 - 学习/实践
  5. STM8L低功耗HALT模式一些总结
  6. 微信小程序日历基础版(可以自行修改想要的其它效果)
  7. 《虚幻4引擎快速入门视频教程》FAQ
  8. ES6 | let、const以及与var之间的区别
  9. 年轻人为提前退休 毕业十年攒100万
  10. 用caffe对自己的图片进行分类,包含详细代码