Python 5个实用技巧:从推导式到XML-RPC服务构建

星野
星野
发布时间:2026-10-12 | 2人浏览过
原创

本文介绍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实用技巧的资料请关注本站其他相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表