当前位置: 首页 > 科技观察

总结90条写Python程序的建议

时间:2023-03-16 12:05:09 科技观察

这是一个有5年Python经验的朋友总结的90条python建议。如果你也在学习pythpn,准备学习python,希望这篇文章对你有用。一、建议先行1、理解Pythonic概念——详见《Python之禅》inPython。长变量名等。有时长变量名会使代码更易读。(2)深入学习Python相关知识,如语言特性、库特性等,如Python的演进过程等。深入学习一两个业界公认的Pythonic代码库,如如Flask等建议3:理解Python和C的区别,比如缩进和{},单引号和双引号,三元运算符?,Switch-Case语句等建议4:在代码中适当添加注释建议5:适当添加空行,使代码布局更合理建议6:编写函数的4条原则(1)函数设计要尽可能短可能,嵌套层次不宜太深(2)函数声明要合理、简单、易用(3)函数参数设计要考虑向后兼容(4)一个函数只做一件事,尽量保证函数粒度的一致性建议七:将常量集中在一个文件中,常量名尽量使用全大写2.编程习语建议八:使用断言语句发现问题,但要注意断言会影响效率建议9:不建议在交换值的时候使用临时变量,直接a,b=b,a建议10:充分利用懒惰求值(Lazyevaluation)的特性来避免不必要的计算建议11:了解枚举替代实现的缺陷(最新版本的Python中增加了枚举特性)建议12:不建议type进行类型检查,因为有时type的结果不一定可靠。如果有需要,建议使用isinstance函数代替建议13:做除法前尽量将变量转为浮点型(Python3不需要考虑)。建议14:警惕eval()函数的安全漏洞,有点类似于SQL注入建议15:使用enumerate()同时获取序列迭代的索引和值建议16:区分适用场景of==andis,尤其是比较字符串等不可变变量时(详见注释)建议17:尽量使用Unicode。Python2编码很头疼,Python3不用想太多。建议18:构建合理的包层次结构来管理Module3。基本用法建议19:尽量少用from...import语句,防止污染命名空间建议20:先使用绝对导入导入模块(相对导入已在Python3中移除)建议21:i+=1不等于++i.在Python中,++i前面的加号只表示正,不是建议22:习惯使用with自动关闭资源,尤其是文件读写。建议23:使用else子句来简化循环(异常处理)。建议24:遵循异常处理的一些基本原则(1)注意异常的粒度,尽量在try块中写尽可能少的代码(2)谨慎使用单独的except语句,或者exceptException语句,但是定位具体异常(3)注意异常捕获的顺序,在合适的层级处理异常(4)使用更友好建议25:避免finally中可能出现的陷阱建议26:深入理解None,并正确判断对象是否为空。建议27:连接字符串优先使用join函数,而不是+操作建议28:格式化字符串时尽量使用.format函数,而不是%形式建议30函数参数:[],{}and():容器初始化的一致形式。使用列表理解可以使代码更清晰、更高效。建议31:给函数传递参数,既不是按值也不是按引用,而是传递对象或对象引用。建议32:警惕默认参数的潜在问题,尤其是默认参数为可变对象时的建议33:在函数中谨慎使用变长参数args和kargs(1)这种使用过于灵活,使得函数签名不清晰,可读性差(2)如果函数参数过大,改用变长参数来简化函数定义,所以一般可以重构函数建议34:深入理解str()的区别而repr()(1)两者的目标不同:str主要是面向客户的,它的目的是可读性,返回形式是字符串形式,具有很高的用户友好性和可读性;而repr是给Python解释器或者Python开发者用的,目的是准确,它的返回值代表Python解释器内部(2)直接在解释器中输入变量,默认调用repr函数,print(var)调用默认str函数(3)repr函数的返回值一般可以通过eval函数恢复(4)两者分别调用对象内置函数__str__()和__repr__()建议35:区分使用场景静态方法和类方法classmethod4.库的使用建议36:掌握string的基本用法建议37:选择sort()和sorted()函数sort()是对列表进行原地排序,所以元组等不可变类型不能排序。sorted()可以在不改变原始变量本身的情况下对任何可迭代类型进行排序。建议38:使用copy模块深拷贝对象,区分浅拷贝和深拷贝ConfigParse建议41:使用argparse模块处理命令行参数建议42:使用pandas处理大型CSV文件Python本身提供了CSV文件处理模块,提供读写器等功能。Pandas可以提供分块、合并处理等,适用于大数据量,更方便二维数据操作。建议43:使用ElementTree解析XML建议44:了解pickle模块的优缺点。优点:接口简单,全平台通用,支持的数据类型广泛,可扩展性强。缺点:不保证数据操作的原子性,存在安全问题,不同语言之间不兼容建议45:序列化JSON模块的另一种选择:加载和转储操作建议46:使用traceback获取堆栈信息建议47:使用logging记录日志信息建议48:使用threading模块编写多线程程序建议49:使用Queue模块让多线程编程更安全5、设计模式建议50:使用模块实现单例模式建议51:使用mixin模式让程序更灵活建议52:使用发布-订阅模式实现松耦合建议53:使用状态模式美化代码6.内部机制建议54:理解内置对象建议55:__init__()不是构造方法,理解__new__的区别()andit建议56:理解变量查找机制,即scopelocalscopeglobaleffectDomainNestedScopeBuilt-inScope建议57:为什么需要self参数建议58:理解MRO(MethodResolutionOrder)和多重继承建议59:理解Descriptor机制建议60:__getattr__()和__getattribute__()方法的区别The建议61:使用更安全的属性建议62:掌握元类建议63:熟悉Python对象协议建议64:使用运算符重载实现中缀语法Generator建议67:基于Generator的协程和greenlets,了解协程的区别,多-threading,andmulti-processingRecommendation68:了解GIL的限制Recommendation69:Objectmanagementandgarbagecollection7.使用工具辅助项目开发Recommendation70:Installthird-partypackagesfromPyPIRecommendation71:Usepipandyolktoinstall和管理包建议72:粘贴到cr吃包建议73:理解单元测试的概念建议74:为包编写单元测试建议75:利用测试驱动程序开发(TDD)提高代码可测试性建议76:使用Pylint检查代码风格代码风格审查代码错误检查以查找重复项和不合理的代码,易于重构高度可配置和可定制支持各种IDE和编辑器集成编译器可以生成基于Python代码的UML图,可以结合Jenkins等持续集成工具支持自动代码审查建议77:进行高效的代码审查建议78:将包发布到PyPI8。性能分析和优化建议79:已启用代码优化的基本原则建议80:使用性能优化工具建议81:使用cProfile定位性能瓶颈建议82:使用memory_profiler和objgraph分析内存使用情况建议83:尝试降低算法复杂度建议84:掌握循环优化的基本技巧为了减少循环,内部计算将显式循环更改为隐式循环。当然,这会牺牲代码的可读性。尝试在循环中引用局部变量。专注于内部嵌套循环。建议85:使用生成器提高效率建议86:使用不同的数据结构优化性能建议87:充分利用set的优势建议88:使用multiprocessing模块克服GIL缺陷建议89:使用线程池提高效率建议90:使用Cythonb编写扩展模块