Python高效编程技巧

摘要:作者有多年的Python编程经验,并且有很多的编程小技巧和知识,其中大多数是通过阅读很流行的开源软件,如Django, Flask, Requests中获得的。

我已经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小技巧和知识,大多数是通过阅读很流行的开源软件,如Django, Flask, Requests中获得的。

下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助。

1.字典推导(Dictionary comprehensions)和集合推导(Set comprehensions)

大多数的Python程序员都知道且使用过列表推导(list comprehensions)。如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短、简洁的创建一个list的方法。

  1. >>> some_list = [12345]  
  2.  
  3. >>> another_list = [ x + 1 for x in some_list ]  
  4.  
  5. >>> another_list  
  6. [23456

自从Python 3.1(甚至是Python 2.7)起,我们可以用同样的语法来创建集合和字典表:

  1. >>> # Set Comprehensions  
  2. >>> some_list = [1234525148]  
  3.  
  4. >>> even_set = { x for x in some_list if x % 2 == 0 }  
  5.  
  6. >>> even_set  
  7. set([824])  
  8.  
  9. >>> # Dict Comprehensions  
  10.  
  11. >>> d = { x: x % 2 == 0 for x in range(111) }  
  12.  
  13. >>> d  
  14. {1False2True3False4True5False6True7False8True9False10True

在第一个例子里,我们以some_list为基础,创建了一个具有不重复元素的集合,而且集合里只包含偶数。而在字典表的例子里,我们创建了一个key是不重复的1到10之间的整数,value是布尔型,用来指示key是否是偶数。

这里另外一个值得注意的事情是集合的字面量表示法。我们可以简单的用这种方法创建一个集合:

  1. >>> my_set = {121234}  
  2.  
  3. >>> my_set  
  4. set([1234]) 

而不需要使用内置函数set()。

2.计数时使用Counter计数对象

这听起来显而易见,但经常被人忘记。对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。

Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:

  1. >>> from collections import Counter  
  2. >>> c = Counter('hello world')  
  3.  
  4. >>> c  
  5. Counter({'l'3'o'2' '1'e'1'd'1'h'1'r'1'w'1})  
  6.  
  7. >>> c.most_common(2)  
  8. [('l'3), ('o'2)] 

3.漂亮的打印出JSON

JSON是一种非常好的数据序列化的形式,被如今的各种API和web service大量的使用。使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。

为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。当在控制台交互式编程或做日志时,这尤其有用:

  1. >>> import json  
  2.  
  3. >>> print(json.dumps(data))  # No indention  
  4. {"status""OK""count"2"results": [{"age"27"name""Oz""lactose_intolerant": true}, {"age"29"name""Joe""lactose_intolerant": false}]}  
  5.  
  6. >>> print(json.dumps(data, indent=2))  # With indention  
  7.  
  8. {  
  9.   "status""OK",  
  10.   "count"2,  
  11.   "results": [  
  12.  
  13.     {  
  14.       "age"27,  
  15.       "name""Oz",  
  16.  
  17.       "lactose_intolerant": true  
  18.     },  
  19.     {  
  20.       "age"29,  
  21.  
  22.       "name""Joe",  
  23.       "lactose_intolerant": false  
  24.     }  
  25.   ]  
  26.  

同样,使用内置的pprint模块,也可以让其它任何东西打印输出的更漂亮。

4.创建一次性的、快速的小型Web服务

有时候,我们需要在两台机器或服务之间做一些简便的、很基础的RPC之类的交互。我们希望用一种简单的方式使用B程序调用A程序里的一个方法——有时是在另一台机器上。仅内部使用。

我并不鼓励将这里介绍的方法用在非内部的、一次性的编程中。我们可以使用一种叫做XML-RPC的协议 (相对应的是这个Python库),来做这种事情。

下面是一个使用SimpleXMLRPCServer模块建立一个快速的小的文件读取服务器的例子:

  1. from SimpleXMLRPCServer import SimpleXMLRPCServer  
  2.  
  3. def file_reader(file_name):  
  4.  
  5.     with open(file_name, 'r') as f:  
  6.         return f.read()  
  7.  
  8. server = SimpleXMLRPCServer(('localhost'8000))  
  9. server.register_introspection_functions()  
  10.  
  11. server.register_function(file_reader)  
  12.  
  13. server.serve_forever() 

客户端:

  1. import xmlrpclib  
  2. proxy = xmlrpclib.ServerProxy('http://localhost:8000/')  
  3.  
  4. proxy.file_reader('/tmp/secret.txt'

我们这样就得到了一个远程文件读取工具,没有外部的依赖,只有几句代码(当然,没有任何安全措施,所以只可以在家里这样做)。

5.Python神奇的开源社区

这里我提到的几个东西都是Python标准库里的,如果你安装了Python,你就已经可以这样使用了。而对于很多其它类型的任务,这里有大量的社区维护的第三方库可供你使用。

下面这个清单是我认为的好用且健壮的开源库的必备条件:

好的开源库必须…

  • 包含一个很清楚的许可声明,能适用于你的使用场景。
  • 开发和维护工作很活跃(或,你能参与开发维护它。)
  • 能够简单的使用pip安装或反复部署。
  • 有测试套件,具有足够的测试覆盖率。

如果你发现一个好的程序库,符合你的要求,不要不好意思————大部分的开源项目都欢迎捐赠代码和欢迎提供帮助——即使你不是一个Python高手。

英文来自:Improving Your Python Productivity

译文:外刊IT时代

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

quartz 任务调试 建表 sql 语句、create table语句

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE IF EXISTS QRTZ_SCHEDUL…

关于ttk的使用与安装

ttk是tkinter中的子模块,在python2.x中是作为独立模块。但是在python3.x中则是成为了tkinter的子模块,因此调用时,转变为 from Tkinter import ttk

SEO艺术

SEO艺术 编辑推荐 在本书中,四位搜索引擎优化(SEO)领域最受瞩目的专家阐述了制订以及执行一个完善的SEO策略时应遵循的一些实用指南与最新技术。 基本信息 原书名: The Art of SEO原出版社: OReilly作者: (…

ActiveMQ支持的传输协议

连接到ActiveMQ Connector:ActiveMQ提供的,用来实现连接通信的功能。包括:client-to-broker、broker-to-broker。ActiveMQ允许客户端使用多种协议来进行连接。 client-to-broker模式一般是配置文件中的transportConnector配置 broker-to-broker:一般是指网络(networ…

http状态码301和302详解及区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下…

哪些编程语言需要修复?

摘要:编程语言有十全十美的吗?每种语言都有缺陷吗?这不,Java、C、C、Python都中枪了。语言之间也可相互“掐架”,一起来看下。 原文作者Kevin Kelleher采用一种比较新颖的方式来比较编程语言:即描述每个编程…

时间修改,学习

设定时间格式 import datetime print datetime.datetime.now().strftime("%Y-%m-%d %H:%M") # 2018-05-08 16:54 时间增加 import datetime print (datetime.datetime.now()datetime.timedelta(days1)).strftime("%Y-%m-%d %H:%M:%S") days改为hours m…

Python标准库

《Python标准库》基本信息原书名: The Python Standard Library by Example 原出版社: Pearson Education 作者: (美)Doug Hellmann 译者: 刘炽 出版社:机械工业出版社 ISBN:9787111378105上架时间&#xf…

五种世界顶级思维-20190303

一、墨菲定律: 你越害怕什么,就越会发生什么。 二、吉尔伯特定律:工作中最大的困难就是没人跟你说如何去做。 三、吉德林法则:把问题清楚的写下来,就已经成功一半了。 四、沃尔森法则:把信息和金钱排在第一…

状态码301和302的区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 定义如下: 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应…

Perl迎来25岁生日

摘要:Perl迎来了它的第25岁生日,普天下Perlist都冒泡同庆一下,很多开发者喜欢它的理由是因其具备强力、稳定、成熟、可移植性等特点,Perl的爱好者们赶快送上你的祝福吧! 昨天,Perl迎来了它的第25岁生日&…

20165114 《网络对抗技术》 Exp0 Kali安装与配置 Week1

目录: 一、kail的下载与安装 二、kali的网络设置 三、安装vmware-tools。 四、更新软件源。 五、共享文件夹 六、安装中文输入法 一、kail的下载与安装 VMware workstation的安装 因为之前的课程已经涉及,所以本机已经安装好了VMware workstation&#x…

大数据:互联网大规模数据挖掘与分布式处理

《大数据:互联网大规模数据挖掘与分布式处理》基本信息原书名:Mining of Massive Datasets作者: (美)拉贾拉曼(Rajaraman,A.) (美)厄尔曼(Ullman,J.D.) [作译者介绍]译者: 王斌丛书名: 图灵程序设计丛书出版社:人民邮电…

pip 切换源安装

https://pypi.tuna.tsinghua.edu.cn/simple/ # 清华大学 https://mirrors.aliyun.com/pypi/simple/ # 阿里云 https://pypi.douban.com/simple/ # 豆瓣 https://pypi.mirrors.ustc.edu.cn/simple/ # 中国科学技术大学 https://pypi.hustunique.com/ # 华中科技大学 代码…

String... 参数定义中有三个点的意思

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 有一个方法: protected void addMessage(String... messages) { ... } String... 是指参数的长度是可以变化的&#xff0…

SpringCloud框架搭建+实际例子+讲解+系列五

(4)服务消费者,面向前端或者用户的服务 本模块涉及到很多知识点:比如Swagger的应用,SpringCloud断路器的使用,服务API的检查、token的校验,feign消费者的使用。大致代码框架如下: 先…

软件开发者最重要的四大技能

摘要:现如今,可供选择的技术、语言及平台可谓五花八门,因此要弄明白哪里是花时间训练的最佳投资点也就难上加难…… 现如今,可供选择的技术、语言及平台可谓五花八门,因此作为软件开发者,要弄明白哪里是花时…

数据缺失的补充与修改

1查看数据情况 df.shape df.info() 2.用指定值填充 df df.fillna(x) 3.判断是否缺失 df.isnull() 4.删除缺失数据 df df.dropna() 5.补充平均值 df df.fillna(df.mean()) 6.填充他前面一个元素值(ffill向前填充,bfill向后填充)(limit:可以…

其他-私人♂收藏(比赛记录 Mar, 2019)

OwO 03.03 [USACO19JAN] A. Redistricting 题意:给 \(g\) ,求 \(f(n)\) 。 \(f(i)f(j)[g(i)\ge g(j)],j \in (i-k,i]\) 。 离散化之后线段树优化 DP ;或者发现额外贡献最多只有 \(1\) ,单调队列。 B. Exercise Route 题意&#xf…

JSR 303 - Bean Validation 简介及使用方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Valida…