我已经用Python编程多年了,直到今天我仍然惊叹于这门语言能够让代码展现出的干净利落和DRY编程原则的应用。这些年来,我学到了很多技巧和知识,其中大部分是通过阅读流行的开源软件获得的,比如Django、Flask、Requests。我在下面挑选的几个小技巧经常被人忽略,但是在日常的编程中确实可以给我们很大的帮助。1.字典推导和集合推导大多数Python程序员都知道并使用过列表推导。如果您不熟悉列表理解的概念-列表理解是一种更短、更简洁的创建列表的方法。>>>some_list=[1,2,3,4,5]>>>another_list=[x+1forxinsome_list]>>>another_list[2,3,4,5,6]自python3.1(甚至Python2.7)起现在,我们可以使用相同的语法来创建集合和字典:>>>#SetComprehensions>>>some_list=[1,2,3,4,5,2,5,1,4,8]>>>even_set={xforxinsome_listifx%2==0}>>>even_setset([8,2,4])>>>#DictComprehensions>>>d={x:x%2==0forxinrange(1,11)}>>>d{1:False,2:True,3:False,4:True,5:False,6:True,7:False,8:True,9:False,10:True}在上面的例子中,我们使用Based在some_list上,创建了一个具有唯一元素的集合,并且该集合仅包含偶数。在字典表的例子中,我们创建了一个key,key是1到10之间的一个不重复的整数,value是一个布尔值,表示key是否为偶数。这里值得注意的另一件事是集合的文字符号。我们可以这样简单地创建一个集合:>>>my_set={1,2,1,2,3,4}>>>my_setset([1,2,3,4])而无需使用内置函数set().2.计数时使用Counter对对象进行计数这听起来很明显,但常常被人遗忘。计数对于大多数程序员来说是一项非常常见的任务,并且在大多数情况下不是很有挑战性-这里有一些方法可以更轻松地完成这项任务。Python的collections库中内置了一个dict类的子类,就是专门用来做这种事情的:>>>fromcollectionsimportCounter>>>c=Counter('helloworld')>>>cCounter({'l':3,'o':2,'':1,'e':1,'d':1,'h':1,'r':1,'w':1})>>>c。most_common(2)[('l',3),('o',2)]3。PrettyprintoutJSONJSON是一种非常好的数据序列化形式,被当今各种API和Web服务广泛使用。使用python内置的json处理,可以让json字符串具有一定的可读性,但是遇到大数据时,就表现为一长条连续的线,人眼很难看清。为了让JSON数据更加友好,我们可以使用缩进参数来输出漂亮的JSON。这在交互式编程或登录控制台时特别有用:>>>importjson>>>print(json.dumps(data))#Noindention{"status":"OK","count":2,"results":[{"age":27,"name":"Oz","lactose_intolerant":true},{"age":29,"name":"Joe","lactose_intolerant":false}]}>>>打印(json.dumps(data,indent=2))#Withindention{"status":"OK","count":2,"results":[{"age":27,"name":"Oz","lactose_intolerant":true},{"age":29,"name":"Joe","lactose_instolerant":false}]}同样,使用内置的pprint模块,你也可以让其他任何东西打印出来更漂亮。4.创建一个一次性的、快速的小型网络服务有时,我们需要在两台机器或服务之间做一些简单的、非常基本的类似RPC的交互。我们想要一种简单的方法来使用程序B调用程序A中的方法——有时是在另一台机器上。仅限内部使用。我不鼓励将此处介绍的方法用于非内部的一次性编程。我们可以使用一种叫做XML-RPC的协议(对应于这个Python库)来做这种事情。下面是使用SimpleXMLRPCServer模块创建快速、小型文件读取服务器的示例:fromSimpleXMLRPCServerimportSimpleXMLRPCServerdeffile_reader(file_name):withopen(file_name,'r')asf:returnf.read()server=SimpleXMLRPCServer(('localhost',8000))server.register_introspection_functions()server.register_function(file_reader)server.serve_forever()客户端:importxmlrpclibproxy=xmlrpclib.ServerProxy('http://localhost:8000/')proxy.file_reader('/tmp/secret.txt')在这样,我们就得到了一个没有外部依赖、只有几行代码的远程文件读取工具(当然,没有任何安全措施,只能自己在家做)。5.Python神奇的开源社区我这里提到的几个东西都在Python标准库中。如果你已经安装了Python,你已经可以通过这种方式使用它了。对于许多其他类型的任务,您可以使用大量由社区维护的第三方库。以下清单是我认为一个好的和健壮的开源库的必备条件:一个好的开源库必须......包含适用于您的用例的明确许可声明。积极开发和维护(或者,你可以参与开发和维护它。)可以使用pip轻松安装或重复部署。有具有足够测试覆盖率的测试套件。如果您找到适合您需要的好库,请不要害羞-大多数开源项目都欢迎代码捐赠和帮助-即使您不是Python高手。
