Python 工匠
文章平均质量分 96
安迪小宝
这个作者很懒,什么都没留下…
展开
-
16-语句、表达式和海象操作符
让我们从两行最简单的 Python 代码开始。这是一个“Hello World”程序,你也许已经见过它无数次,对里面的每个字母都了如指掌。和。具体来说,是一行赋值语句,它将字符串'piglei'赋给了name变量。则是一个表达式,它通过调用内置函数print往屏幕打印信息。原创 2024-01-26 21:30:35 · 970 阅读 · 0 评论 -
15-Python 工匠:在边界处思考
边界情况(Edge cases)”是我们在日常编码时的老朋友。但它不怎么招人喜欢,毕竟,我们都希望自己的代码只有一条主流程贯穿始终,不需要太多的条件判断、异常捕获。但边界情况同时又是无法避免的,只要有代码,边界情况就会存在。所以,如果能更好的处理它们,我们的代码就可以变得更清晰易读。除了上面介绍的这些思路外,还有很多东西都可以帮助我们处理边界情况,比如利用面向对象的多态特性、使用空对象模式等等。使用条件判断和异常捕获都可以用来处理边界情况。原创 2024-01-26 21:29:10 · 949 阅读 · 0 评论 -
14-Python 工匠:写好面向对象代码的原则(下)
依赖倒置原则”与“接口隔离原则”。这两条原则之间有一个共同点,那就是它们都和“抽象”有着紧密的联系。前者告诉我们要面向抽象而非实现编程,后者则教导我们在设计抽象时应该做到精准。“D:依赖倒置原则”认为高层模块和低层模块都应该依赖于抽象依赖抽象,意味着我们可以完全修改低层实现,而不影响高层代码在 Python 中你可以使用 abc 模块来定义抽象类除 abc 外,你也可以使用其他技术来完成依赖倒置“I:接口隔离原则”认为客户不应该依赖任何它不使用的方法设计接口就是设计抽象。原创 2024-01-25 21:33:45 · 811 阅读 · 0 评论 -
13-Python 工匠:写好面向对象代码的原则(中)
里氏替换原则。“里氏替换原则”是一个非常具体的原则,它专门为 OOP 里的继承场景服务。当你设计类继承关系,尤其是编写子类代码时,请经常性的问自己这个问题:“如果我把项目里所有使用父类的地方换成这个子类,程序是否还能正常运行?如果答案是否定的,那么你就应该考虑调整一下现在的类设计了。调整方式有很多种,有时候你得把大类拆分为更小的类,有时候你得调换类之间的继承关系,有时候你得为父类添加新的方法和属性,就像文章里的第一个场景一样。只要开动脑筋,总会找到合适的办法。“L:里氏替换原则”原创 2024-01-25 21:29:36 · 996 阅读 · 0 评论 -
11- Python 工匠:高效操作文件的三个建议
文件操作我们在日常工作中经常需要接触的领域,使用更方便的模块、利用生成器节约内存以及编写适用面更广的函数,可以让我们编写出更高效的代码。使用 pathlib 模块可以简化文件和目录相关的操作,并让代码更直观PEP-519定义了表示“文件路径”的标准协议,Path 对象实现了这个协议通过定义生成器函数来分块读取大文件可以节约内存使用可以在一些特定场景简化代码难以编写测试的代码,通常也是需要改进的代码让函数依赖“类文件对象”可以提升函数的适用面和可组合性看完文章的你,有没有什么想吐槽的?原创 2024-01-25 00:31:37 · 978 阅读 · 0 评论 -
10-Python 工匠:做一个精通规则的玩家
问题解决以后,让我们再做一点小小的总结。使用普通的两层循环筛选符合规则的结果集利用哈希表结构(set 对象)创建索引,提升处理效率将数据转换为自定义对象,利用规则,直接使用集合运算为什么第三种方式会比前面两种好呢?首先,第一个方案的性能问题过于明显,所以很快就会被放弃。那么第二个方案呢?仔细想想看,方案二其实并没有什么明显的缺点。甚至和第三个方案相比,因为少了自定义对象的过程,它在性能与内存占用上,甚至有可能会微微强于后者。原创 2024-01-23 19:21:35 · 968 阅读 · 0 评论 -
9-Python 工匠:一个关于模块的小故事
模块间的循环依赖是一个在大型 Python 项目中很常见的问题,越复杂的项目越容易碰到这个问题。当我们在参与这些项目时,如果对模块结构、分层、抽象缺少应有的重视。那么项目很容易就会慢慢变得复杂无比、难以维护。所以,合理的模块结构与分层非常重要。它可以大大降低开发人员的心智负担和项目维护成本。这也是我为什么要和你分享这个简单故事的原因。整个项目内的模块依赖关系与分层是否合理。合理的模块结构与分层可以降低项目的开发维护成本合理的模块结构不是一成不变的,应该随着项目发展调整。原创 2024-01-23 19:19:53 · 788 阅读 · 0 评论 -
8-Python 工匠:使用装饰器的技巧
在这篇文章里,我与你分享了有关装饰器的一些技巧与小知识。一切 callable 的对象都可以被用来实现装饰器混合使用函数与类,可以更好的实现装饰器wrapt 模块很有用,用它可以帮助我们用更简单的代码写出复杂装饰器“装饰器”只是语法糖,它不是“装饰器模式”装饰器会改变函数的原始签名,你需要在内层函数修改外层函数的变量时,需要使用nonlocal关键字看完文章的你,有没有什么想吐槽的?请留言或者在项目 Github Issues告诉我吧。>>>下一篇【9.一个关于模块的小故事】原创 2024-01-23 19:18:19 · 1261 阅读 · 0 评论 -
7- Python 工匠:编写地道循环的两个建议
地道”这个词,通常被用来形容某人做某件事情时,非常符合当地传统,做的非常好。打个比方,你去参加一个朋友聚会,同桌的有一位广东人,对方一开口,句句都是标准京腔、完美儿化音。那你可以对她说:“您的北京话说的真地道既然“地道”这个词形容的经常是口音、做菜的口味这类实实在在的东西,那“地道”的循环代码又是什么意思呢?让我拿一个经典的例子来解释一下。如果你去问一位刚学习 Python 一个月的人:“如何在遍历一个列表的同时获取当前下标?原创 2024-01-23 19:17:23 · 976 阅读 · 0 评论 -
6-Python 工匠: 异常处理的三个好习惯
在这篇文章中,我分享了与异常处理相关的三个建议。只捕获可能会抛出异常的语句,避免含糊的捕获逻辑保持模块异常类的抽象一致性,必要时对底层异常类进行包装使用“上下文管理器”可以简化重复的异常处理逻辑看完文章的你,有没有什么想吐槽的?请留言或者在项目 Github Issues告诉我吧。>>>下一篇【7.编写地道循环的两个建议】<<<上一篇【5.让函数返回结果的技巧】原创 2024-01-21 09:49:26 · 751 阅读 · 0 评论 -
5-Python 工匠:让函数返回结果的技巧
在这篇文章中,我虚拟了一些与 Python 函数返回有关的场景,并针对每个场景提供了我的优化建议。让函数拥有稳定的返回值,一个函数只做好一件事使用定义快捷函数抛出异常也是返回结果的一种方式,使用它来替代返回错误信息函数是否适合返回 None,由函数签名的“含义”所决定使用“空对象模式”可以简化调用方的错误处理逻辑多使用生成器函数,尽量用循环替代递归看完文章的你,有没有什么想吐槽的?请留言或者在项目 Github Issues告诉我吧。>>>下一篇【6.异常处理的三个好习惯】原创 2024-01-21 09:48:46 · 845 阅读 · 0 评论 -
4-Python 工匠:容器的门道
在这篇文章中,我们首先从“容器类型”的定义出发,在底层和高层两个层面探讨了容器类型。之后遵循系列文章传统,提供了一些编写容器相关代码时的技巧。了解容器类型的底层实现,可以帮助你写出性能更好的代码提炼需求里的抽象概念,面向接口而非实现编程多使用“懒惰”的对象,少生成“迫切”的列表使用元组和字典可以简化分支代码结构使用next()函数配合迭代器可以高效完成很多事情,但是也需要注意“枯竭”问题collections、itertools 模块里有非常多有用的工具,快去看看吧!原创 2024-01-21 09:47:53 · 781 阅读 · 0 评论 -
3 Python 工匠:使用数字与字符串的技巧
以上就是『Python 工匠』系列文章的第三篇,内容比较零碎。由于篇幅原因,一些常用的操作比如字符串格式化等,文章里并没有涵盖到。以后有机会再写吧。编写代码时,请考虑阅读者的感受,不要出现太多神奇的字面量当操作结构化字符串时,使用对象化模块比直接处理更有优势dis 模块非常有用,请多多使用它验证你的猜测多线程环境下的编码非常复杂,要足够谨慎,不要相信自己的直觉Python 语言的更新非常快,不要被别人的经验所左右看完文章的你,有没有什么想吐槽的?请留言或者在。原创 2024-01-21 09:47:07 · 833 阅读 · 0 评论 -
Python 工匠:编写条件分支代码的技巧
我们常说,在 Python 里,“万物皆对象”。)*,来自定义对象的各种行为。我们可以用很多在别的语言里面无法做到、有些魔法的方式来影响代码的执行。None0False[](){}set(), … …布尔值为真的对象:非0的数值、True,非空的序列、元组,普通的用户类实例,… …通过内建函数bool(),你可以很方便的查看某个对象的布尔真假。True重点来了,虽然所有用户类实例的布尔值都是真。自定义类的__bool__魔法方法(在 Python 2.X 版本中为。当类定义了__bool__原创 2024-01-21 09:45:42 · 857 阅读 · 0 评论 -
1-Python 工匠:善用变量来改善代码质量
这个原则属于老生常谈了。很多人(包括我)在刚开始学习编程时,会有一个习惯。就是把所有的变量定义写在一起,放在函数或方法的最前面。path = []... ...这样做只会让你的代码『看上去很整洁』,但是对提高代码可读性没有任何帮助。更好的做法是,让变量定义尽量靠近使用。那样当你阅读代码时,可以更好的理解代码的逻辑,而不是费劲的去想这个变量到底是什么、哪里定义的?# 为所有性别为女性,或者级别大于 3 的活跃用户发放 10000 个金币return看见if后面那一长串了吗?有点难读对不对?原创 2024-01-21 09:44:51 · 824 阅读 · 0 评论