Python 5个实用技巧:从推导式到XML-RPC服务构建
本文介绍5个常被忽略但极具实用价值的Python技巧。涵盖使用字典和集合推导式简化代码、利用Counter高效统计元素、通过indent参数美化JSON输出、使用SimpleXMLRPCServer快速搭建内部RPC服务,以及评估开源库质量的五大标准。这些技巧无需额外依赖,能显著提升日常开发效率与代码可读性。
以下精选的五个技巧虽常被忽视,却能在日常编程中提供实质性的帮助。
1. 字典推导式(Dictionary comprehensions)与集合推导式(Set comprehensions)
大多数Python开发者熟悉并经常使用列表推导式(list comprehensions)。若对其概念尚不熟悉,列表推导式是一种更简短、简洁的创建列表的方法。
>>> some_list = [1, 2, 3, 4, 5] >>> another_list = [ x + 1 for x in some_list ] >>> another_list [2, 3, 4, 5, 6]
自Python 3.1(甚至包括Python 2.7)起,我们可以使用相同的语法来创建集合和字典:
>>> # Set Comprehensions
>>> some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]
>>> even_set = { x for x in some_list if x % 2 == 0 }
>>> even_set
set([8, 2, 4])
>>> # Dict Comprehensions
>>> d = { x: x % 2 == 0 for x in range(1, 11) }
>>> d
{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}
在第一个示例中,我们以some_list为基础,创建了一个仅包含不重复偶数元素的集合。在字典示例中,我们构建了一个键为1到10之间不重复整数的字典,其值为布尔型,用于指示对应键是否为偶数。
此处另一个值得注意的点是集合的字面量表示法。我们可以直接通过以下方式创建集合:
>>> my_set = {1, 2, 1, 2, 3, 4}
>>> my_set
set([1, 2, 3, 4])
而无需调用内置函数set()。
2. 使用Counter对象进行计数
这看似显而易见,却常被遗忘。对程序员而言,统计某类事物是一项常见任务,且通常并不复杂——这里有几种更简便的方法来完成此类任务。
Python的collections模块中提供了一个内置的dict子类,专门用于此类计数任务:
>>> from collections import Counter
>>> c = Counter( hello world )
>>> c
Counter({ l : 3, o : 2, : 1, e : 1, d : 1, h : 1, r : 1, w : 1})
>>> c.most_common(2)
[( l , 3), ( o , 2)]
3. 美观地打印JSON数据
JSON是一种极佳的数据序列化格式,被当今各类API和Web服务广泛采用。使用Python内置的json处理库可使JSON字符串具备一定可读性,但当数据量较大时,它往往呈现为长且连续的一行,难以肉眼阅读。
为了让JSON数据展示更友好,我们可以使用indent参数来输出格式化的JSON。这在控制台交互式编程或生成日志时尤为有用:
>>> import json
>>> print(json.dumps(data)) # No indention
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}
>>> print(json.dumps(data, indent=2)) # With indention
{
"status": "OK",
"count": 2,
"results": [
{
"age": 27,
"name": "Oz",
"lactose_intolerant": true
},
{
"age": 29,
"name": "Joe",
"lactose_intolerant": false
}
]
}
此外,使用内置的pprint模块,也能使其他任何对象的打印输出更加美观。
4. 创建一次性、快速的小型Web服务
有时,我们需要在两台机器或服务之间进行简便、基础的特远程过程调用(RPC)交互。我们希望以简单方式使用B程序调用A程序中的某个方法——有时甚至是在另一台机器上。此类场景通常仅限内部使用。
我不建议将本文介绍的方法用于非内部或一次性编程场景。我们可以使用XML-RPC协议(对应Python库)来实现此类功能。
以下是一个使用SimpleXMLRPCServer模块建立快速小型文件读取服务器的示例:
from SimpleXMLRPCServer import SimpleXMLRPCServer
def file_reader(file_name):
with open(file_name, r ) as f:
return f.read()
server = SimpleXMLRPCServer(( localhost , 8000))
server.register_introspection_functions()
server.register_function(file_reader)
server.serve_forever()
客户端代码
import xmlrpclib proxy = xmlrpclib.ServerProxy( http://localhost:8000/ ) proxy.file_reader( /tmp/secret.txt )
这样我们就获得了一个远程文件读取工具,无需外部依赖,仅需几行代码(当然,这没有任何安全措施,因此仅建议在家庭网络环境中使用)。
5. Python强大的开源社区
上述提到的几个功能均包含在Python标准库中,安装Python后即可直接使用。而对于许多其他类型的任务,社区维护的大量第三方库可供选用。
以下清单是我认为好用且健壮的开源库所应具备的条件:
优秀的开源库必须……
- 包含清晰的许可声明,且适用于你的使用场景。
- 开发和维护工作活跃(或者,你能参与其开发维护)。
- 能够简单地通过pip安装或反复部署。
- 拥有测试套件,且具备足够的测试覆盖率。
如果你发现一个符合要求的优秀程序库,请不要犹豫——大多数开源项目都欢迎代码捐赠和帮助,即使你不是Python专家。
以上就是关于Python 5个实用技巧的详细内容,更多关于Python实用技巧的资料请关注本站其他相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









