如何高效地阅读 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