一团网资讯

一团资讯 > python > Python高效率编程的8条箴言

Python高效率编程的8条箴言

2018-05-19 10:37:54     发布者:来源网络

Python作为一门动态语言,提供了很多语法糖,有助于我们以很短的代码实现复杂的功能。另一方面,Python的历史悠久,积累了大量高效易用的库,基本上常见的任务都有对应的工具库。善用Python的语言特性,我们可以写出Pythonic的代码,下面探讨一下如何写出高效率的Python代码

1.使用lambda表达式

lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,这些叫做lambda的函数,是从LISP借用来的,可以用在任何需要函数的地方:

>>> g = lambda x: x * 2

>>> g(3)

6

>>> (lambda x: x * 2)(3) 6

2.使用filter过滤list和dict

(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回: >>> def f(x): return x % 2 != 0 and x % 3 != 0

>>> filter(f, range(2, 25))

[5, 7, 11, 13, 17, 19, 23]

>>> def f(x): return x != 'a'

>>> filter(f, abcdef)

'bcdef'

3. 强大的map reduce函数

map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:

>>> def cube(x): return x*x*x

>>> map(cube, range(1, 11))

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

>>> def cube(x) : return x + x

...

>>> map(cube , abcde)

['aa', 'bb', 'cc', 'dd', 'ee']

另外map也支持多个sequence,这就要求function也支持相应数量的参数输入:

>>> def add(x, y): return x+y

>>> map(add, range(8), range(8))

[0, 2, 4, 6, 8, 10, 12, 14]

reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:

>>> def add(x,y): return x + y

>>> reduce(add, range(1, 11))

55 (注:1+2+3+4+5+6+7+8+9+10)

4. 变量交换不需要使用临时变量

>>>a=1 >>>b=2 >>>a, b = b, a

5. 灵活使用生成器yield,让代码更简洁,优雅

生成器提供了一个更方便的产生迭代器的方式 代码更为简洁,优雅 充分利用了延迟评估的特性,仅在需要时才产生相应的元素,而不是一次产生所有元素,节省了内存,提高了效率 使得协同程序更加容易实现,协同程序是有多个近入点,可以恢复挂起的函数。实际上,python的协程相关的库例如greenlet等就是基于yield实现的。 使用yield写的斐波那契函数,简洁吧

>>> def fib(n):

... a = b = 1

... for i in range(n):

... yield a

... a,b = b, a+b

...

>>> c = fib(10)

>>> c.next()

1

>>> c.next()

1

>>> c.next()

2

>>> c.next()

3

>>> c.next()

5

6. 灵活使用list,set, deque, array优化性能

7.灵活使用sort,sorted进行排序 sort只能对列表进行排序,不会改变原来的列表 sorted可以对任何迭代器进行排序,例如字典dict,元组,多维list等

>>> from operator import itemgetter

>>> gameresult = [['jim',96,'A'],['Eddy',99,'A'],['Cindy',87,'B'], ['Lucy', 76, 'C']]

>>> sorted(gameresult, key=itemgetter(2,1))

[['jim', 96, 'A'], ['Eddy', 99, 'A'], ['Cindy', 87, 'B'], ['Lucy', 76, 'C']]

8. 使用python标准库,这块内容太多,不展开了 常见的库有requests, jsonlib, pandas,argparse等

[ 责任编辑:来源网络 ]

python箴言_Python高效率编程的8条箴言相关推荐

  1. python大鱼吃小鱼_python 游戏编程 大鱼吃小鱼

    # 游戏编程:按照以下游戏编写一个乌龟类和鱼类,并尝试编写游戏. # 假设游戏场景(x,y)为0<=x<=10,0<=y<=10 # 游戏生成1只乌龟和10只鱼 # 他们的移动 ...

  2. 吃鸡 python开发_python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

    各位小伙伴大家好: 本期开始我们一起来做一个小项目,总结一下我们学习过的有关面向对象编程的知识.目标是实现一个另类版的简易吃鸡游戏,让亚瑟开枪射击小兵. 在为程序写代码之前,我们需要先分析这个程序大概 ...

  3. socket python实例_Python网络编程—第27课—Socket实例(0531)

    一.创建套接字示例(服务端) import socket #导入模块 import time #导入模块 s = socket.socket(socket.AF_INET, socket.SOCK_S ...

  4. 存款利息python题_Python——GUI编程 利息计算器 作业9(python programming)

    importsysfrom PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * classcal ...

  5. 2007冲杀职场N条箴言

    2007冲杀职场N条箴言 第1只魔戒 第一条箴言:习惯仿佛像一根缆绳,我们每天给它缠上一股新索,要不了多久,它就会变得牢不可破. 第二条箴言:人类所有优点都要变成习惯才有价值,即使爱这样一个永恒的 主 ...

  6. python网络编程内容_Python网络编程

    本文要写的内容也称为Python套接字编程,并简单介绍socketserver类.参考教程主要是<Python核心编程>. 首先,客户端/服务器模型,客户端向服务器发送请求,在请求合理的情 ...

  7. python概率编程_Python概率编程库PyMC应用案例二则,pymc应用案例

    Python概率编程库PyMC应用案例二则,pymc应用案例 这是受国防科大刘万伟老师委托发的概率编程方面的内容,这方面我不懂,为了避免解释错了,我就直接把刘老师的PPT资料截图发了. 代码执行结果为 ...

  8. python语句行从解释器提示符后第几列开始_Python核心编程(第2版)PDF文档免费下载...

    第1部分 Python核心 第1章 欢迎来到Python世界 1.1 什么是Python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 1 ...

  9. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

最新文章

  1. jsp访问WEB-INF下面的资源
  2. dbvis 数据库工具:数据库驱动集合包获取,dbvis数据库工具安装驱动实例演示
  3. Deepin v20依赖错误,检测更新失败解决办法
  4. STP/RSTP/MSTP协议简介
  5. 【转】_declspec(naked) 使用
  6. java反射 动态调用_java反射拼接方法名动态执行方法
  7. NHibernate 3.3
  8. linux程序库设置错误,Citrix在Arch Linux中无效 – 库错误
  9. Hive Hooks介绍
  10. anconda设置镜像源_三、DockerFile 定制属于自己的专属镜像
  11. seq2seq模型_使用Tensorflow搭建一个简单的Seq2Seq翻译模型
  12. cf 1102F Elongated Matrix
  13. TensorFlow中的Shape如何理解
  14. Mybatis面试题总结
  15. python无法打开h5权限_求助:python post请求访问不到数据
  16. 看看下边的问题你能够回答出来多少?
  17. 【Go语言学习】安装与配置
  18. Node Sass could not find a binding for your current environment
  19. 服务器上的文件夹设置ftp,设置ftp服务器上传文件夹
  20. 浅谈LOG日志的写法

热门文章

  1. Qt工作笔记-QGraphicsScene练习【Qt图形框架练习】
  2. C++工作笔记-枚举类型的作用
  3. android拍照功能编程,android实现手机App实现拍照功能示例
  4. 计算机拼图形 比创意教案,拼图形比创意教学设计.doc
  5. LoadRunner几个重要的概念:事务、集合点、思考时间
  6. linux 终端与shell输出大小不匹配
  7. Linux网络编程--sendfile零拷贝高效率发送文件
  8. windows Tracert命令
  9. USACO-Section1.6 Number Triangles (动态规划)
  10. 二十、子程序设计(函数)