位置: 编程技术 - 正文

python编码最佳实践之总结(python简单编码)

编辑:rootadmin

推荐整理分享python编码最佳实践之总结(python简单编码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python编码规范有哪些,python简单编码,python编码有哪些规范,python3编码,编码 python,python编码规则,python3编码,python编码规则,内容如对您有帮助,希望把文章链接给更多的朋友!

相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁、易读以及可扩展性等特性使得它大受青睐。

工作中很多同事都在用python,但往往很少有人关注它的性能和惯用法,一般都是现学现用,毕竟python不是我们的主要语言,我们一般只是使用它来做一些系统管理的工作。但是我们为什么不做的更好呢?python zen中有这样一句:There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. 大意就是python鼓励使用一种最优的方法去完成一件事,这也是和ruby等的一个差异。所以一种好的python编写习惯个人认为很重要,本文就重点从性能角度出发对python的一些惯用法做一个简单总结,希望对大家有用~

提到性能,最容易想到的是降低复杂度,一般可以通过测量代码回路复杂度(cyclomatic complexitly)和Landau符号(大O)来分析, 比如dict查找是O(1),而列表的查找却是O(n),显然数据的存储方式选择会直接影响算法的复杂度。

一、数据结构的选择1. 在列表中查找:

对于已经排序的列表考虑用bisect模块来实现查找元素,该模块将使用二分查找实现

而快速插入一个元素可以用:

这样就插入元素并且不需要再次调用 sort() 来保序,要知道对于长list代价很高.

2. set代替列表:

比如要对一个list进行去重,最容易想到的实现:

显然上面的实现的复杂度是O(n2),若改成:

复杂度马上降为O(n),当然这里假定set可以满足后续使用。

另外,set的union,intersection,difference等操作要比列表的迭代快的多,因此如果涉及到求列表交集,并集或者差集等问题可以转换为set来进行,平时使用的时候多注意下,特别当列表比较大的时候,性能的影响就更大。

3. 使用python的collections模块替代内建容器类型:

collections有三种类型:

deque:增强功能的类似list类型defaultdict:类似dict类型namedtuple:类似tuple类型

列表是基于数组实现的,而deque是基于双链表的,所以后者在中间or前面插入元素,或者删除元素都会快很多。

defaultdict为新的键值添加了一个默认的工厂,可以避免编写一个额外的测试来初始化映射条目,比dict.setdefault更高效,引用python文档的一个例子:

可见性能提升了快3倍。defaultdict用一个list工厂作为参数,同样可用于内建类型,比如long等。

除了实现的算法、架构之外,python提倡简单、优雅。所以正确的语法实践又很有必要,这样才会写出优雅易于阅读的代码。

二、语法最佳实践字符串操作:优于python字符串对象是不可改变的,因此对任何字符串的操作如拼接,修改等都将产生一个新的字符串对象,而不是基于原字符串,因此这种持续的 copy会在一定程度上影响Python的性能: (1)用join代替 '+' 操作符,后者有copy开销;

python编码最佳实践之总结(python简单编码)

(2)同时当对字符串可以使用正则表达式或者内置函数来处理的时候,选择内置函数。如str.isalpha(),str.isdigit(),str.startswith((‘x', ‘yz')),str.endswith((‘x', ‘yz'))

(3)字符格式化操作优于直接串联读取:

str = "%s%s%s%s" % (a, b, c, d) # efficient str = "" + a + b + c + d + "" # slow

2. 善用list comprehension(列表解析) & generator(生成器) & decorators(装饰器),熟悉itertools等模块:

(1) 列表解析,我觉得是python2中最让我印象深刻的特性,举例1:

举例2:

没错,就是这么优雅简单。

(2) 生成器表达式在python2.2引入,它使用'lazy evaluation'思想,因此在使用内存上更有效。引用python核心编程中计算文件中最长的行的例子:

这种实现简洁而且不需要把文件文件所有行读入内存。

(3) python在2.4引入装饰器,又是一个让人兴奋的特性,简单来说它使得函数和方法封装(接收一个函数并返回增强版本的函数)更容易阅读、理解。'@'符号是装饰器语法,你可以装饰一个函数,记住调用结果供后续使用,这种技术被称为memoization的,下面是用装饰器完成一个cache功能:

运行结果:

装饰器在很多场景用到,比如参数检查、锁同步、单元测试框架等,有兴趣的人可以自己进一步学习。

3. 善用python强大的自省能力(属性和描述符):自从使用了python,真的是惊讶原来自省可以做的这么强大简单,关于这个话题,限于内容比较多,这里就不赘述,后续有时间单独做一个总结,学习python必须对其自省好好理解。

三、 编码小技巧1、在python3之前版本使用xrange代替range,因为range()直接返回完整的元素列表而xrange()在序列中每次调用只产生一个整数元素,开销小。(在python3中xrange不再存在,里面range提供一个可以 遍历任意长度的范围的iterator)2、if done is not None比语句if done != None更快;3、尽量使用"in"操作符,简洁而快速: for i in seq: print i4、'x < y < z'代替'x < y and y < z';5、while 1要比while True更快, 因为前者是单步运算,后者还需要计算;6、尽量使用build-in的函数,因为这些函数往往很高效,比如add(a,b)要优于a+b;7、在耗时较多的循环中,可以把函数的调用改为内联的方式,内循环应该保持简洁。8、使用多重赋值来swap元素:

x, y = y, x # elegant and efficient

而不是:

temp = x x = y y = temp

9. 三元操作符(python2.5后):V1 if X else V2,避免使用(X and V1) or V2,因为后者当V1=""时,就会有问题。

. python之switch case实现:因为switch case语法完全可用if else代替,所以python就没 有switch case语法,但是我们可以用dictionary或lamda实现:

switch case结构:

用try…catch来实现带Default的情况,个人推荐使用dict的实现方法。

这里只总结了一部分python的实践方法,希望这些建议可以帮助到每一位使用python的同学,优化性能不是重点,高效解决问题,让自己写的代码更加易于维护!

Python3.2模拟实现webqq登录 这是我最初学习时自己做的一个python模拟登录webqq的实例代码,具体代码如下importhashlibfromurllibimportrequest,parsefromhttpimportcookiejarimportre,random,timeimportthreadin

深入解读Python解析XML的几种方式 在XML解析方面,Python贯彻了自己开箱即用(batteriesincluded)的原则。在自带的标准库中,Python提供了大量可以用于处理XML语言的包和工具,数量之多,甚

bpython 功能强大的Python shell Python是一个非常实用、流行的解释型编程语言,其优势之一就是可以借助其交互的shell进行探索式地编程。你可以试着输入一些代码,然后马上获得解释

标签: python简单编码

本文链接地址:https://www.jiuchutong.com/biancheng/382349.html 转载请保留说明!

上一篇:Python在Console下显示文本进度条的方法(python console不能用)

下一篇:Python3.2模拟实现webqq登录(python模拟操作)

  • 加计扣除减免税额怎么计算
  • 一般纳税人附加税优惠政策2023
  • 原材料盘亏自然损耗
  • 印花税减半征收优惠政策2022
  • 企业清算过程中应收应付的处置
  • 房地产开发企业预缴增值税
  • 机场工作人员的家属票
  • 外出经营许可证办理流程
  • 预付款属于什么结算方式
  • 资金账簿印花税减半征收是从什么时候开始的
  • 代扣代缴个人所得税
  • 委托加工物资加工费怎么结转
  • 付垫资款给其他公司应该怎么做账?
  • 融资租赁分摊差额扣除会计处理?
  • 个人所得税法规定可减征个税的情形有
  • 专利年费是不是只能一项一项交
  • 降温费和取暖费标准
  • 出口的货物因质量问题被扣款
  • 事业单位福利费计提标准
  • 跨期费用会计处理
  • 到期一次付息债券的实际利率怎么算
  • 汇算清缴时所得税费用
  • 财政拨款收入的明细科目
  • php unit
  • 个税这个月多交了下个月减回来
  • 如何修复win10开机转圈五分钟
  • PHP:Memcached::delete()的用法_Memcached类
  • win11系统咋样
  • 企业存货成本包括利润吗
  • 逾期未申报如何申报
  • 上飞机可以带2个充电宝吗
  • yolov5 教程
  • 小规模与一般纳税人做账区别
  • 三维点云识别
  • 印花税账务处理会计分录
  • 来料加工企业的税率是多少
  • vue2响应式原理面试回答
  • 增发股票购买子公司
  • 购买牵引车和挂车购车流程
  • 企业电子发票重开流程
  • 公司活动举办属于哪个部门
  • 并发环境下,共享资源的正确使用方式是
  • 没有增值税专用发票
  • 汇算清缴需要传票么
  • 珠宝行业的会计处理方式
  • 开具发票的单位名称与实际收款不一致?
  • 民间非盈利组织使用什么会计准则
  • 公司赠送客户礼品怎么做账
  • 坐车时的保险费怎么算
  • 合并报表怎么合并
  • 人力资源公司可以开培训费发票吗
  • 原材料暂估的账务处理
  • 微信的业务
  • 代理记账许可证查询
  • 明细分类账表格
  • 商品流通企业进货费用
  • sql两个数据怎么合并到一起
  • Mysql Explain 详细介绍
  • win8.1开机进入桌面
  • Windows Server 2008如何改动服务器名称与管理员密码?
  • linux终端怎么运行
  • 注册表mime
  • win7安装office2010错误1935
  • 电脑怎么装双系统win10和linux
  • nvsvc.exe - nvsvc是什么进程 有什么用
  • win8.1其他用户名登不进去
  • win8.1最流畅
  • 将list转换为json字符串
  • 非常漂亮的英文怎么说
  • angular.min.js
  • 如何查询个体工商户是查账征收还是核定征收
  • 青海国家税务局总局官网
  • 浙江省网上税务局申报
  • 云南省个人所得税税率
  • 水产品 免税
  • 税务局税收风险排查总结
  • 珠宝消费税怎么申报
  • 广东地方税务局领导班子名单
  • oecd是什么意思的缩写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设