pprint:美观打印数据结构

文章目录

  • 一、pprint.pprint():美观化打印
  • 二、pprint.pformat():格式化成字符串表示
  • 三、pprint() 处理包含__repr__() 方法的类
  • 四、递归引用:Recursion on {typename} with id={number}
  • 五、depth 参数控制 pprint() 方法的输出深度
  • 六、width 参数控制 pprint() 方法的输出宽度
  • 七、compact 参数尝试在每一行上放置更多数据

pprint模块包含一个「美观打印机」,用于生成数据结构的美观视图。

本篇文章后续代码中均会使用到如下data变量数据:

data = [(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),(2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),(3, ['m', 'n']),(4, ['o', 'p', 'q']),(5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),
]

一、pprint.pprint():美观化打印

使用pprint模块的pprint()方法可以美观化打印数据结构。该方法格式化一个对象,并把该对象作为参数传入,写至一个数据流(或者是默认的sys.stdout)。

from pprint import pprintprint(data)
>>> 输出结果:
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}), (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}), (3, ['m', 'n']), (4, ['o', 'p', 'q']), (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]pprint(data)
>>> 输出结果:
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),(2,{'e': 'E','f': 'F','g': 'G','h': 'H','i': 'I','j': 'J','k': 'K','l': 'L'}),(3, ['m', 'n']),(4, ['o', 'p', 'q']),(5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

二、pprint.pformat():格式化成字符串表示

使用pprint模块的pformat()方法将数据结构格式化成一个字符串表示,然后可以打印这个格式化的字符串或者写入日志。

import logging
from pprint import pformatlogging.basicConfig(# 将日志输出级别设置为 DEBUGlevel=logging.DEBUG,# 日志的输出格式为「级别名称(左对齐8字符)+ 日志消息」,-表示左对齐format='%(levelname)-8s %(message)s',
)logging.debug('Logging pformatted data')
formatted = pformat(data)
for line in formatted.splitlines():logging.debug(line.rstrip())>>> 输出结果:
DEBUG    Logging pformatted data
DEBUG    [(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
DEBUG     (2,
DEBUG      {'e': 'E',
DEBUG       'f': 'F',
DEBUG       'g': 'G',
DEBUG       'h': 'H',
DEBUG       'i': 'I',
DEBUG       'j': 'J',
DEBUG       'k': 'K',
DEBUG       'l': 'L'}),
DEBUG     (3, ['m', 'n']),
DEBUG     (4, ['o', 'p', 'q']),
DEBUG     (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

三、pprint() 处理包含__repr__() 方法的类

pprint()方法底层使用的PrettyPrinter类可以处理定义了__repr__()方法的类。

from pprint import pprintclass node:def __init__(self, name, contents=[]):self.name = nameself.contents = contents[:]def __repr__(self):# repr()返回一个对象的“官方”字符串表示# 理想情况下,这个字符串是一个有效的 Python 表达式,能够用来重新创建这个对象return ('node(' + repr(self.name) + ', ' +repr(self.contents) + ')')trees = [node('node-1'),node('node-2', [node('node-2-1')]),node('node-3', [node('node-3-1')]),
]
# 嵌套对象的表示形式由 PrettyPrinter 组合,以返回完整的字符串表示
pprint(trees)>>> 输出结果:
[node('node-1', []),node('node-2', [node('node-2-1', [])]),node('node-3', [node('node-3-1', [])])]

四、递归引用:Recursion on {typename} with id={number}

递归数据结构由指向原数据源的引用表示,形式为<Recursion on {typename} with id={number}>

from pprint import pprintlocal_data = ['a', 'b', 1, 2]
# 列表增加到其自身,这会创建一个递归引用
local_data.append(local_data)# id()函数用于获取列表对象的内存地址标识符
# 4306287424
print(id(local_data))
# ['a', 'b', 1, 2, <Recursion on list with id=4306287424>]
pprint(local_data)

五、depth 参数控制 pprint() 方法的输出深度

对于非常深的数据结构,可能不必输出所有的细节。使用depth参数可以控制pprint()方法对数据结构的输出深度,输出中未包含的层次用省略号表示。

from pprint import pprint# [(...), (...), (...), (...), (...)]
pprint(data, depth=1)
# [(1, {...}), (2, {...}), (3, [...]), (4, [...]), (5, [...])]
pprint(data, depth=2)

六、width 参数控制 pprint() 方法的输出宽度

可以在pprint()方法中使用参数width控制格式化文本的输出宽度,默认宽度是80列。注意,当宽度太小而无法完成格式化时,如果截断或转行会导致非法语法,那么便不会截断或转行。

from pprint import pprintfor width in [80, 5, 1]:print('WIDTH =', width)pprint(data, width=width)print()# >>> 输出结果:
WIDTH = 80
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),(2,{'e': 'E','f': 'F','g': 'G','h': 'H','i': 'I','j': 'J','k': 'K','l': 'L'}),(3, ['m', 'n']),(4, ['o', 'p', 'q']),(5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]WIDTH = 5
[(1,{'a': 'A','b': 'B','c': 'C','d': 'D'}),(2,{'e': 'E','f': 'F','g': 'G','h': 'H','i': 'I','j': 'J','k': 'K','l': 'L'}),(3,['m','n']),(4,['o','p','q']),(5,['r','s','tu','v','x','y','z'])]WIDTH = 1
[(1,{'a': 'A','b': 'B','c': 'C','d': 'D'}),(2,{'e': 'E','f': 'F','g': 'G','h': 'H','i': 'I','j': 'J','k': 'K','l': 'L'}),(3,['m','n']),(4,['o','p','q']),(5,['r','s','tu','v','x','y','z'])]

七、compact 参数尝试在每一行上放置更多数据

compact布尔型参数(默认False)使得pprint()方法尝试在每一行上放置更多数据,而不是把复杂数据结构分解为多行。

注意:一个数据结构在一行上放不下时,就会分解;如果多个元素可以放置在一行上,就会合放。

from pprint import pprintprint('DEFAULT:')
pprint(data, compact=False)
print('\nCOMPACT:')
pprint(data, compact=True)>>> 输出结果:
DEFAULT:
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),(2,{'e': 'E','f': 'F','g': 'G','h': 'H','i': 'I','j': 'J','k': 'K','l': 'L'}),(3, ['m', 'n']),(4, ['o', 'p', 'q']),(5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]COMPACT:
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),(2,{'e': 'E','f': 'F','g': 'G','h': 'H','i': 'I','j': 'J','k': 'K','l': 'L'}),(3, ['m', 'n']), (4, ['o', 'p', 'q']),(5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

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

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

相关文章

解决Docker运行hello-world镜像报错问题

解决Docker运行hello-world镜像报错问题当您运行sudo docker run hello-world命令时出现"Unable to find image hello-world locally"和"context deadline exceeded"错误&#xff0c;这通常是由于Docker无法从默认镜像仓库下载镜像导致的。以下是几种解决方…

一体化步进伺服电机在汽车线束焊接设备中的应用案例

在汽车制造领域&#xff0c;线束焊接是确保电气系统可靠性的关键工艺。为解决传统焊接设备限位精度不足、运行稳定性差等问题&#xff0c;采用‌STM42系列一体化步进伺服电机‌&#xff0c;通过位置模式与原点回归功能的优化配置&#xff0c;显著提升了焊接设备的定位精度与抗干…

【Django】首次创建Django项目初始化

1. 创建虚拟环境例如创建虚拟环境为rebortpython3.6 -m venv test/rebort2. 安装Djangosudo -i cd test/rebort/bin/ source ./activate pip install Django如果是在wingows上安装&#xff0c;同时适用默认安装会&#xff0c;会在python的安装目前下生成了两个文件在lib目录下会…

Spark引擎中RDD的性质

RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是SparkCore提供的核心抽象。一个RDD在逻辑上抽象地代表了一个HDFS文件或数据库中的表&#xff0c;但RDD是被分区的&#xff0c;每个分区分布在不同的节点上&#xff0c;从而并行执行。 …

人工智能学习:什么是NLP自然语言处理

一、什么是自然语言处理 自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域,主要目标是让机器能够理解和生成自然语言,这样人们可以通过语言与计算机进行更自然的互动。 对于自然语言来说,处理的数据…

【Selenium】UI自动化测试框架设计:从项目结构到Base-Page层的最佳实践

UI自动化测试框架设计&#xff1a;从项目结构到Base-Page层的最佳实践全面解析UI自动化测试项目的架构设计与实现细节&#xff0c;构建可维护的测试框架在现代软件开发中&#xff0c;UI自动化测试已成为确保产品质量的重要环节。一个良好的项目结构和合理的设计模式能够显著提高…

QT项目文件(.pro)指南

概述Qt项目文件&#xff08;.pro文件&#xff09;是Qt开发的核心配置文件&#xff0c;它使用qmake工具来管理项目的构建过程。一个良好组织的.pro文件不仅能确保项目正确编译&#xff0c;还能大大提高代码的可维护性和团队协作效率。本文将深入探讨.pro文件的结构、语法和最佳实…

Scikit-learn Python机器学习 - 机器学习开发流程

锋哥原创的Scikit-learn Python机器学习视频教程&#xff1a; 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识&#xff0c;包括机器学习概述&#xff0c;特征工程(数据…

基于Spring Cloud Sleuth与Zipkin的分布式链路追踪实战指南

基于Spring Cloud Sleuth与Zipkin的分布式链路追踪实战指南 随着微服务架构的普及&#xff0c;服务间调用链条变得越来越复杂。在生产环境中&#xff0c;定位跨服务调用的性能瓶颈、故障根因&#xff0c;往往需要分布式链路追踪能力。本文结合Spring Cloud Sleuth与Zipkin&…

Coze源码分析-工作空间-项目开发-后端源码

前言 本文将深入分析Coze Studio项目中用户登录后点击"项目开发"功能的后端实现&#xff0c;通过源码解读来理解整个智能体项目管理系统的架构设计和技术实现。 项目架构概览 整体架构设计 Coze Studio后端采用了经典的分层架构模式&#xff0c;将项目开发功能划分为…

单片机元件学习

DS18B20温度传感器51&#xff08;stc8h8k64u&#xff09;简介ds18B20是使用单总线的元器件代码/*--------------------------------------------------------------------- */ /* ------------------------ For STC8H MCU ----------------------------- */ /* --- Web: www.…

Spring事务管理策略对比与性能优化实践指南

Spring事务管理策略对比与性能优化实践指南 问题背景介绍 在现代企业级应用中&#xff0c;事务管理是保障数据一致性与安全性的核心机制。Spring作为主流的Java企业级开发框架&#xff0c;提供了多种事务管理方案&#xff0c;包括编程式事务、声明式事务以及与第三方分布式事务…

C++“类吸血鬼幸存者”游戏制作的要点学习

古之学者必有师&#xff0c;对于技术的提升&#xff0c;只靠自己的摸索虽然能得到深刻的经验&#xff0c;但往往没有较高的效率。笔者这些天学习了BV1eM4m1S74K“提瓦特幸存者”的C开发&#xff0c;也是实现了该类型游戏的开发。今天&#xff0c;就通过经验总结&#xff0c;亲手…

Python OpenCV图像处理与深度学习:Python OpenCV图像分割入门

图像分割&#xff1a;从基础到实践 学习目标 通过本课程&#xff0c;学员们将了解图像分割的基本概念&#xff0c;掌握使用OpenCV实现图像分割的方法&#xff0c;包括基于阈值的分割和基于区域的分割技术。同时&#xff0c;学员将能够独立完成简单的图像分割任务&#xff0c;并…

MQ使用场景分析

异步解耦‌系统间通过消息队列通信&#xff0c;降低耦合度&#xff08;如订单系统与库存系统&#xff09;典型场景&#xff1a;电商下单后异步通知物流系统‌流量削峰‌应对突发流量&#xff0c;将请求暂存到消息队列逐步处理典型场景&#xff1a;秒杀活动时缓冲高并发请求‌数…

人工智能学习:NLP文本处理的基本方法

一、分词 1、分词介绍 概念 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符。分词过程就是找到这样分界符的过程…

Vue3 中 Proxy 在组件封装中的妙用

目录 Vue3 中 Proxy 在组件封装中的妙用&#xff1a;让组件交互更优雅 组件封装中的常见痛点 Proxy 是什么&#xff1f; Proxy 在组件封装中的应用 基础组件结构 使用 Proxy 实现方法透传 代码解析 父组件中的使用方式 Proxy 的其他应用场景 1. 权限控制 2. 方法调用…

DevExpress WinForms中文教程:Data Grid - 过滤编辑器

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

华为云CCE

华为云CCE&#xff1a;重构云原生应用的全栈引擎 一、云原生时代的"操作系统" 在数字经济浪潮中&#xff0c;容器化和微服务架构已成为企业数字化转型的标配。华为云容器引擎&#xff08;CCE&#xff09;作为云原生领域的"操作系统"&#xff0c;通过深度…

STM32——Uinx时间戳+BKP+RTC实时时钟

目录 一、Uinx时间戳 1.1Uinx简介 1.2UTC/GMT 1.3时间戳转换 1.3.1主要数据类型 1.3.2主要函数 1.3.3C语言时间戳转换示例 1.3.4时间格式化说明符 1.3.5注意事项 二、BKP 2.1BKP简介 2.2BKP基本结构 三、RTC 3.1RTC简介 3.2RTC框图 3.3RTC基本结构 3.4RTC硬件…