如何高效地阅读 Python 代码?

副标题:一个重要但很少被讨论的技能 从网上看到这篇英文文章,感觉还不错,翻译了一下。Claude2 也有参与翻译😝 AI摘要 这篇文章讨论了阅读代码的重要性以及一些高效阅读代码的策略。作者指出,阅读代码需要不同于编写代码的技能,并且认为相信自己可以轻松地阅读发布的解决方案是一个常见的误解。文章提供了一个练习的代码库,并展示了一些阅读代码的策略,如忽略函数定义和简化重复的代码块。作者还强调了使用IDE(集成开发环境)来帮助快速识别和关注代码的重要性。最后,文章提到了编写可读的代码以及学习阅读其他人的代码和第三方库的重要性。 正文 阅读代码是一项重要的技能,但却不常被讨论。我认为存在这样的假设:如果你学会了相当好地编写代码,你也会自动学会有效地阅读代码。但是阅读代码需要不同于编写代码的技能,所以我不认为这是一个安全的假设。 一位读者最近询问《Python Crash Course》中练习的一个解决方案。他说他的解决方案比我发布的简单许多,并说他们很难阅读发布的解决方案。我认为这是一个很好的例子,说明有效代码阅读的策略根本不明显。在这篇文章中,我将展示我们讨论的代码,以及一些比从头到尾逐行阅读更有效的处理代码的策略。 练习内容 我们讨论的练习分两个部分。第一部分是: 彩票 制作一个包含10个数字和5个字母的列表或元组。 从中随机选择4个数字或字母,打印出匹配这4个数字或字母的任意一注彩票可获奖。 这个练习旨在让人们练习使用Python标准库中的代码,比如 random.choice()函数。 下面是后续练习: 彩票分析 你可以用一个循环来模拟刚刚建立的彩票游戏有多难中奖。 建一个名为 my_ticket 的列表或元组。 编写一个循环获取数字,直到抽中的彩票获奖为止,循环结束后打印循环了多少次才得到中奖的彩票。 在读者已经开始学习序列、循环、函数和类的时候,给他们布置这样一个既具体又开放的练习是很有意思的。对这样的练习任务制定解决方案,可以应用你所学的知识。 发布的解决方案 如果你不习惯阅读代码,发布的解决方案会觉得有点长,但我全部贴出来: from random import choice def get_winning_ticket(possibilities): """Return a winning ticket from a set of possibilities.""" winning_ticket = [] # We don't want to repeat winning numbers or letters, so we'll use a # while loop. while len(winning_ticket) < 4: pulled_item = choice(possibilities) # Only add the pulled item to the winning ticket if it hasn't # already been pulled....

八月 6, 2023 · Beeta

关于IPython的几个冷知识

一直在用ipython,有几个很重要的tip是今天才知道。 使用python -m 打开ipython 因为ipython在安装时候已经写入到了python命令同目录下,所以平常直接ipython就可以进入了。但最近突发奇想,想用python -m ipython打开,却发现打不开 python3 -m ipython # 报错:/xxxxxx/bin/python: No module named ipython 研究了好久才发现,原来需要有大小写! python3 -m IPython 那新问题又来了,我怎么知道我装的模块实际名字是什么呢?不去查谁知道ipython的正式名字是IPython呢。我们可以用pkgutil这个内置模块进行查询 import pkgutil for module in pkgutil.iter_modules(): if "ipython" in module.name.lower(): # 注意把模块名都小写化,同时去除这个条件也可以输出所有的模块名字 print(module.name) ipython -i 用法 之前没用过,在研究上面问题的时候看到了。这个参数的含义是加载一个py文件并进入交互系统,作用就是进入ipython之后,我们就可以直接调用py文件内定义的变量和函数了。 比如有个文件script.py # script.py x = 10 y = 20 def add(a, b): return a + b 我们使用python3 -m IPython -i script.py 或者 ipython -i script.py 进入ipython In [1]: x Out[1]: 10 In [2]: y Out[2]: 20 In [3]: print(add(3,5)) 8 未完待续

七月 19, 2023 · Beeta

博文写作和发布最佳实践

之前在平台上写博文,写完发布拉倒。现在自己建站,虽然自由了些,但牵扯到hugo、github提交和发布,麻烦了点,现在把流程规范和记录下来。 1. 创建博文目录 goblog # alias命令,cd到博客所在的git仓库 # 新建博文markdown # 规范:posts/年份/博文标题目录/index.md -》最中路径在content下 # 年份是便于分类,博文标题做目录是为了让图片和md文件在一块,标题用英文,在url上好看些,md文档的front matter 的title字段可定义中文标题 hugo new posts/2023/博文标题/index.md 2. 使用 wolai + typora 编辑md文件 使用wolai编辑正文,使用 typora 编辑front matter和查看图片引用是否正常 使用 wolai 编辑正文,然后以md格式导出,将该文件与上述index.md文件合并 使用 typora 打开文件并编辑: open -a typora content/posts/2023/博文标题/index.md 编辑front matter: 注意编辑标题、分类、tag等, draft 改为 false, slug 是博文 url 的最后字段,如果为空默认就用当前目录,slug会默认做转换:将所有字母转换为小写字母,「-」替换空格,删除所有特殊字符 另外,还要在typora中设置「图片复制到./assets文件夹」 3. 本地预览 写完后,可用以下命令预览,其中 -D 是显示草稿文章。 hugo server -D 4. 提交到github # 一般情况下 git add -A git cm -m "添加博文xx" git push origin master # 可能需要代理 提交后,会激活github action自动发布,稍后即可在 tubaozi....

七月 9, 2023 · Beeta

Hugo 静态博客搭建指南

一直想着建个自己的网站,顺便折腾点主题。前几天突发奇想注册了这个域名。顺手也把网站搭起来。调研了现在静态博客的情况,之前印象中的流行框架 HEXO 已然被 Hugo 盖住了风头。学习了下 Hugo,够简单,功能也够丰富。虽然网上 Hugo 搭建指南一大把,但我还是记录一下自己的使用过程,也作为第一篇正式博文。 你可以在这篇博客中了解到: Hugo 搭建静态博客方法 利用 github pages 托管网页 利用 github action 自动发布网页 一些建站过程中的 tips 安装Hugo Hugo的官网是https://gohugo.io/,另外有个中文文档网站https://gohugo.org/也可以参考。 官方推荐了很多安装方式,但我觉得直接下载二进制文件最为方便(升级需要手动),Hugo有标准版、扩展版两个版本,扩展版支持对 WebP 图像进行编码和使用嵌入式 LibSass 转译器将 Sass 转译到 CSS,官方也推荐使用扩展版。 下载后,放到对应路径,添加到 PATH 环境变量,更方便使用。安装完后,使用以下命令进行验证: hugo version 使用Hugo 生成站点 即在指定路径下生成名为 sitename 的文件夹 hugo new site /path/to/sitename 站点目录结构: ▸ archetypes/ ▸ content/ ▸ layouts/ ▸ static/ config.toml 创建文章 在content文件夹下新建posts文件夹并新建xx.md文档 hugo new posts/xx.md 默认生成的 xx.md 内容和解释如下: title: "xx" # 网站显示的文章名字,可以与文件名不同 date: 2021-08-19T15:04:55+08:00 draft: true # 是否为草稿 # 下面两个默认没有,需要自己加 categories: ["互联网"] # 文章分类 tags: ["Hugo", "Github Pages", "Github Actions", "CI/CD"] # 文章标签 一般情况下,我们都要新建这些文件构建网站的骨架:...

六月 12, 2023 · Beeta