- Python 基础
- Python - 首页
- Python - 概述
- Python - 历史
- Python - 特性
- Python vs C++
- Python - Hello World 程序
- Python - 应用领域
- Python - 解释器
- Python - 环境搭建
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 字面量
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 位运算符
- Python - 成员运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if else
- Python - 嵌套 if
- Python - match-case 语句
- Python - 循环
- Python - for 循环
- Python - for-else 循环
- Python - while 循环
- Python - break 语句
- Python - continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数与模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅限关键字参数
- Python - 位置参数
- Python - 仅限位置参数
- Python - 可变参数
- Python - 变量作用域
- Python - 函数注解
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 字符串切片
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表元素
- Python - 修改列表元素
- Python - 添加列表元素
- Python - 删除列表元素
- Python - 循环遍历列表
- Python - 列表推导式
- Python - 列表排序
- Python - 复制列表
- Python - 合并列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组
- Python - 访问元组元素
- Python - 更新元组
- Python - 解包元组
- Python - 循环遍历元组
- Python - 合并元组
- Python - 元组方法
- Python - 元组练习
- Python 集合
- Python - 集合
- Python - 访问集合元素
- Python - 添加集合元素
- Python - 删除集合元素
- Python - 循环遍历集合
- Python - 合并集合
- Python - 复制集合
- Python - 集合运算符
- Python - 集合方法
- Python - 集合练习
- Python 字典
- Python - 字典
- Python - 访问字典元素
- Python - 修改字典元素
- Python - 添加字典元素
- Python - 删除字典元素
- Python - 字典视图对象
- Python - 循环遍历字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组元素
- Python - 添加数组元素
- Python - 删除数组元素
- Python - 循环遍历数组
- Python - 复制数组
- Python - 反转数组
- Python - 排序数组
- Python - 合并数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python - OS 文件/目录方法
- Python - OS 路径方法
- 面向对象编程
- Python - OOPs 概念
- Python - 类与对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态
- Python - 方法重写
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误与异常
- Python - 语法错误
- Python - 异常
- Python - try-except 块
- Python - try-finally 块
- Python - 抛出异常
- Python - 异常链
- Python - 嵌套 try 块
- Python - 用户自定义异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 线程连接
- Python - 线程命名
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护线程
- Python - 线程同步
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络编程
- Python - 网络编程
- Python - Socket 编程
- Python - URL 处理
- Python - 泛型
- Python 库
- NumPy 教程
- Pandas 教程
- SciPy 教程
- Matplotlib 教程
- Django 教程
- OpenCV 教程
- Python 杂项
- Python - 日期与时间
- Python - 数学
- Python - 迭代器
- Python - 生成器
- Python - 闭包
- Python - 装饰器
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式化
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送邮件
- Python - 扩展
- Python - 工具/实用程序
- Python - GUIs
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用元类进行元编程
- Python - 模拟和存根
- Python - Monkey Patching
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - Humanize 包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
- Python 有用资源
- Python - 问答
- Python - 在线测验
- Python - 快速指南
- Python - 参考
- Python - 速查表
- Python - 项目
- Python - 有用资源
- Python - 讨论
- Python 编译器
- NumPy 编译器
- Matplotlib 编译器
- SciPy 编译器
Python - 输出格式化
Python 中的输出格式化
Python 中的输出格式化用于使代码更易读,输出更友好。无论您是显示简单的文本字符串、复杂的数据结构还是创建报表,Python 都提供了几种格式化输出的方法。
这些方法包括使用:
- 字符串模运算符 (%)
- format() 方法
- f-字符串(格式化字符串字面量)
- 模板字符串
此外,Python 的 "textwrap" 和 "pprint" 模块提供了高级功能,用于换行文本和漂亮打印数据结构。
使用字符串模运算符 (%)
我们可以使用字符串模运算符 % 来格式化输出。此运算符是字符串独有的,弥补了缺少来自 C 的 printf() 系列函数的不足。格式说明符,如 %d、%c、%f 和 %s,用作字符串中的占位符,类似于 C 中的占位符。
下面是一个简单的例子:
print ("My name is %s and weight is %d kg!" % ('Zara', 21))
它将产生以下输出:
My name is Zara and weight is 21 kg!
使用 format() 方法
我们可以使用 format() 方法格式化输出,该方法在 Python 3.0 中引入,并已向后移植到 Python 2.6 和 2.7。
format() 方法是内置字符串类的一部分,允许进行复杂的变量替换和值格式化。与字符串模运算符相比,它被认为是一种更优雅、更灵活的格式化字符串的方法。
语法
format() 方法的一般语法如下:
str.format(var1, var2,...)
返回值
该方法返回一个格式化后的字符串。
字符串本身包含占位符 {},变量的值将依次插入其中。
示例
name="Rajesh" age=23 print ("my name is {} and my age is {} years".format(name, age))
它将产生以下输出:
my name is Rajesh and my age is 23 years
您可以将变量作为关键字参数用于 format() 方法,并在字符串中使用变量名作为占位符。
print ("my name is {name} and my age is {age} years".format(name="Rajesh", age=23))
使用 F-字符串
F-字符串或格式化字符串字面量是 Python 中一种简单、快速且易于阅读的格式化字符串的方法。您可以通过在字符串的开头引号前添加一个f来创建 f-字符串。
在字符串内,您可以包含变量的占位符,这些占位符用花括号{}括起来。这些变量的值将插入到字符串的这些位置。
示例
在这个例子中,变量 "name" 和 "age" 被插入到字符串中 "{name}" 和 "{age}" 所在的位置。F-字符串使在字符串中包含变量值变得很容易,无需使用 format() 方法或字符串连接 −
name = 'Rajesh' age = 23 fstring = f'My name is {name} and I am {age} years old' print (fstring)
它将产生以下输出:
My name is Rajesh and I am 23 years old
Python中的格式转换规则
你也可以指定 C 风格的格式化符号。唯一的区别是使用:代替%。例如,用{:s}代替%s,用{:d}代替%d,如下所示−
name = "Rajesh" age = 23 print("my name is {:s} and my age is {:d} years".format(name, age))
你将得到如下所示的输出−
my name is Rajesh and my age is 23 years
模板字符串
string模块中的Template类提供了一种动态格式化字符串的替代方法。Template类的优点之一是可以自定义格式化规则。
一个有效的模板字符串或占位符由两部分组成:$符号后跟一个有效的Python标识符。
你需要创建一个Template类的对象,并将模板字符串作为参数传递给构造函数。接下来,调用Template类的substitute()方法。它将作为参数提供的数值放在模板字符串的位置。
示例
from string import Template temp_str = "My name is $name and I am $age years old" tempobj = Template(temp_str) ret = tempobj.substitute(name='Rajesh', age=23) print (ret)
它将产生以下输出:
My name is Rajesh and I am 23 years old
textwrap模块
Python 的 textwrap 模块中的 wrap 类包含用于通过调整输入段落中的换行符来格式化和换行纯文本的功能。它有助于使文本格式良好且美观。
textwrap 模块具有以下便捷函数−
textwrap.wrap(text, width=70)
textwrap.wrap() 函数换行 text(字符串)中的单个段落,因此每行的长度最多为 width 个字符。返回输出行的列表,不包含最终换行符。可选关键字参数对应于 TextWrapper 的实例属性。width 默认为 70。
textwrap.fill(text, width=70)
textwrap.fill() 函数换行 text 中的单个段落,并返回包含换行段落的单个字符串。
这两种方法都在内部创建一个 TextWrapper 类对象并在其上调用单个方法。由于实例不会被重用,因此创建你自己的 TextWrapper 对象会更高效。
示例
import textwrap text = ''' Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation via the off-side rule. Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly procedural), object-oriented and functional programming. It is often described as a "batteries included" language due to its comprehensive standard library. ''' wrapper = textwrap.TextWrapper(width=40) wrapped = wrapper.wrap(text = text) # Print output for element in wrapped: print(element)
它将产生以下输出:
Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation via the off-side rule. Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly procedural), objectoriented and functional programming. It is often described as a "batteries included" language due to its comprehensive standard library.
TextWrapper 对象定义了以下属性−
width − (默认值:70)换行行的最大长度。
expand_tabs − (默认值:True)如果为真,则文本中的所有制表符都将使用 text 的 expandtabs() 方法扩展为空格。
tabsize − (默认值:8)如果 expand_tabs 为真,则文本中的所有制表符都将扩展为零个或多个空格,具体取决于当前列和给定的制表符大小。
replace_whitespace − (默认值:True)如果为真,则在制表符扩展之后但在换行之前,wrap() 方法将用单个空格替换每个空格字符。
drop_whitespace − (默认值:True)如果为真,则会删除每行开头和结尾的空格(换行后但在缩进之前)。但是,如果后面跟着非空格,则不会删除段落开头的空格。如果被删除的空格占据整行,则整行都会被删除。
initial_indent − (默认值:'')将预先添加到换行输出第一行的字符串。
subsequent_indent − (默认值:'')将预先添加到换行输出所有行(第一行除外)的字符串。
fix_sentence_endings − (默认值:False)如果为真,则 TextWrapper 尝试检测句子结尾并确保句子始终用两个空格隔开。这通常对于等宽字体中的文本是需要的。
break_long_words − (默认值:True)如果为真,则长于 width 的单词将被拆分,以确保没有行的长度超过 width。如果为假,则长单词不会被拆分,并且某些行的长度可能超过 width。
break_on_hyphens − (默认值:True)如果为真,则换行最好在空格处和复合词中的连字符之后进行,这在英语中很常见。如果为假,则只有空格会被视为潜在的良好换行位置。
shorten() 函数
shorten() 函数折叠并截断给定的文本以适应给定的宽度。文本首先压缩其空格。如果随后适合 *width*,则按原样返回。否则,将尽可能多的单词连接起来,然后附加占位符 −
示例
import textwrap python_desc = """Python is a general-purpose interpreted, interactive, object-oriented, and high-level programming language. It was created by Guido van Rossum during 1985- 1990. Like Perl, Python source code is also available under the GNU General Public License (GPL). This tutorial gives enough understanding on Python programming language.""" my_wrap = textwrap.TextWrapper(width = 40) short_text = textwrap.shorten(text = python_desc, width=150) print('\n\n' + my_wrap.fill(text = short_text))
它将产生以下输出:
Python is a general-purpose interpreted, interactive, object-oriented,and high level programming language. It was created by Guido van Rossum [...]
pprint 模块
Python 标准库中的pprint模块使 Python 数据结构的外观更美观。pprint 代表 pretty printer(漂亮打印机)。任何可以被 Python 解释器正确解析的数据结构都会被优雅地格式化。
格式化的表达式尽可能保持在一行中,但如果长度超过格式化的宽度参数,则会换成多行。pprint 输出的一个独特之处在于,字典在显示表示形式格式化之前会自动排序。
PrettyPrinter 类
pprint 模块包含PrettyPrinter类的定义。其构造函数采用以下格式−
语法
pprint.PrettyPrinter(indent, width, depth, stream, compact)
参数
indent − 定义每个递归级别添加的缩进。默认为 1。
width − 默认值为 80。所需的输出受此值限制。如果长度大于 width,则将其分成多行。
depth − 控制要打印的级别数。
stream − 默认情况下为 std.out − 默认输出设备。它可以采用任何流对象,例如文件。
compact − 默认情况下设置为 False。如果为真,则只显示可在 width 内调整的数据。
PrettyPrinter 类定义了以下方法−
pprint() 方法
pprint() 方法打印 PrettyPrinter 对象的格式化表示形式。
pformat() 方法
pformat() 方法根据构造函数的参数返回对象的格式化表示形式。
示例
以下示例演示了 PrettyPrinter 类的简单用法−
import pprint students={"Dilip":["English", "Maths", "Science"],"Raju":{"English":50,"Maths":60, "Science":70},"Kalpana":(50,60,70)} pp=pprint.PrettyPrinter() print ("normal print output") print (students) print ("----") print ("pprint output") pp.pprint(students)
输出显示了普通打印和漂亮打印−
normal print output {'Dilip': ['English', 'Maths', 'Science'], 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}, 'Kalpana': (50, 60, 70)} ---- pprint output {'Dilip': ['English', 'Maths', 'Science'], 'Kalpana': (50, 60, 70), 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
pprint模块还定义了与 PrettyPrinter 方法对应的便捷函数 pprint() 和 pformat()。下面的示例使用 pprint() 函数。
from pprint import pprint students={"Dilip":["English", "Maths", "Science"], "Raju":{"English":50,"Maths":60, "Science":70}, "Kalpana":(50,60,70)} print ("normal print output") print (students) print ("----") print ("pprint output") pprint (students)
使用 pformat() 方法的示例
下一个示例使用 pformat() 方法和 pformat() 函数。要使用 pformat() 方法,首先要设置 PrettyPrinter 对象。在这两种情况下,格式化的表示形式都使用普通的 print() 函数显示。
import pprint students={"Dilip":["English", "Maths", "Science"], "Raju":{"English":50,"Maths":60, "Science":70}, "Kalpana":(50,60,70)} print ("using pformat method") pp=pprint.PrettyPrinter() string=pp.pformat(students) print (string) print ('------') print ("using pformat function") string=pprint.pformat(students) print (string)
以下是上述代码的输出−
using pformat method {'Dilip': ['English', 'Maths', 'Science'], 'Kalpana': (50, 60, 70), 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}} ------ using pformat function {'Dilip': ['English', 'Maths', 'Science'], 'Kalpana': (50, 60, 70), 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
漂亮打印也可以与自定义类一起使用。在类中重写 __repr__() 方法。当使用 repr() 函数时会调用 __repr__() 方法。它是 Python 对象的官方字符串表示形式。当我们使用对象作为 print() 函数的参数时,它会打印 repr() 函数的返回值。
示例
在这个例子中,__repr__() 方法返回 player 对象的字符串表示形式−
import pprint class player: def __init__(self, name, formats=[], runs=[]): self.name=name self.formats=formats self.runs=runs def __repr__(self): dct={} dct[self.name]=dict(zip(self.formats,self.runs)) return (repr(dct)) l1=['Tests','ODI','T20'] l2=[[140, 45, 39],[15,122,36,67, 100, 49],[78,44, 12, 0, 23, 75]] p1=player("virat",l1,l2) pp=pprint.PrettyPrinter() pp.pprint(p1)
以上代码的输出为−
{'virat': {'Tests': [140, 45, 39], 'ODI': [15, 122, 36, 67, 100, 49], 'T20': [78, 44, 12, 0, 23, 75]}}