- Python 基础知识
- Python - 主页
- Python - 概述
- Python - 历史
- Python - 特性
- Python 与 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 - 决策
- Python - 如果有的话
- Python - 大小写匹配语句
- Python - for 循环
- Python - for-else 循环
- Python - While 循环
- Python-break语句
- Python-继续语句
- 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 - OOP 概念
- 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-套接字编程
- Python-URL 处理
- Python - 泛型
- Python 杂项
- Python - 日期和时间
- Python - 数学
- Python - 迭代器
- Python - 生成器
- Python - 闭包
- Python - 装饰器
- Python - 递归
- Python - 正则表达式
- Python-PIP
- Python-数据库访问
- Python - 弱引用
- Python-序列化
- Python - 模板
- Python - 输出格式
- Python-性能测量
- Python-数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - 图形用户界面编程
- Python - 命令行参数
- Python - 文档字符串
- Python-JSON
- Python-发送电子邮件
- Python - 进一步扩展
- Python - 工具/实用程序
- Python - 图形用户界面
- Python 问题与解答
- Python - 编程示例
- Python - 快速指南
- Python - 有用的资源
- Python - 讨论
Python - 输出格式
本章将讨论格式化输出的不同技术。
字符串格式化运算符
Python 最酷的功能之一是字符串格式运算符 %。该运算符是字符串所特有的,它弥补了 C 的 printf() 系列函数的不足。C 语言中使用的格式规范符号(%d %c %f %s 等)用作字符串中的占位符。
以下是一个简单的例子 -
print ("My name is %s and weight is %d kg!" % ('Zara', 21))
它将产生以下输出-
My name is Zara and weight is 21 kg!
format() 方法
Python 3.0 向 str 类引入了 format() 方法,以更有效地处理复杂的字符串格式。此方法已向后移植到 Python 2.6 和 Python 2.7。
这种内置字符串类的方法提供了执行复杂变量替换和值格式化的能力。这种新的格式化技术被认为更加优雅。
句法
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))
您还可以指定 C 样式格式化符号。唯一的变化是使用 : 而不是 %。例如,使用 {:s} 代替 %s,使用 (:d} 代替 %d
name="Rajesh" age=23 print ("my name is {:s} and my age is {:d} years".format(name, age))
F 弦
在 Python 中,f 字符串或文字字符串插值是另一种格式化工具。通过这种格式化方法,您可以在字符串常量中使用嵌入的 Python 表达式。Python f 字符串更快、更易读、更简洁且不易出错。
该字符串以“f”前缀开头,并在其中插入一个或多个占位符,其值是动态填充的。
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
模板字符串
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
文本换行模块
Python 的textwrap 模块中的wrap 类包含通过调整输入段落中的换行符来格式化和换行纯文本的功能。它有助于使文本格式良好且美观。
textwrap 模块具有以下便利功能 -
textwrap.wrap(文本,宽度=70)
将单个段落包装在文本(字符串)中,因此每行的长度最多为 width 个字符。返回输出行列表,没有最终换行符。可选关键字参数对应于 TextWrapper 的实例属性。宽度默认为 70。
textwrap.fill(文本,宽度=70)
将单个段落换行到文本中,并返回包含换行段落的单个字符串。
这两种方法都在内部创建 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)如果为 true,则文本中的所有制表符将使用文本的 Expandtabs() 方法扩展为空格。
tabsize - (默认值:8)如果expand_tabs为true,则文本中的所有制表符字符将扩展到零个或多个空格,具体取决于当前列和给定的制表符大小。
Replace_whitespace - (默认值:True)如果为 true,则在制表符扩展之后但换行之前,wrap() 方法将用单个空格替换每个空白字符。
drop_whitespace - (默认值:True)如果为 true,则删除每行开头和结尾处的空格(换行之后但缩进之前)。但是,如果段落开头的空白后面跟随有非空白,则不会删除该空白。如果删除的空格占据整行,则整行将被删除。
initial_indent - (默认值:'')将添加到包装输出的第一行之前的字符串。
后续_缩进- (默认值:'')将添加到除第一行之外的所有包装输出行之前的字符串。
fix_sentence_endings - (默认值:False)如果为 true,TextWrapper 会尝试检测句子结尾并确保句子始终以两个空格分隔。对于等宽字体的文本来说,这通常是需要的。
break_long_words - (默认值:True)如果为 true,则长于宽度的单词将被断开,以确保没有行长于宽度。如果为假,长字就不会断,有的行可能比宽度还长。
break_on_hyphens - (默认值:True)如果为 true,则换行将优先发生在复合词中的空格和连字符之后,正如英语中的惯例。如果为 false,则只有空格才会被视为潜在的换行位置。
Short() 函数
折叠并截断给定文本以适合给定宽度。文本首先折叠其空白。如果它适合*宽度*,则按原样返回。否则,将连接尽可能多的单词,然后附加占位符 -
例子
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 这个名字代表漂亮的打印机。任何可以被Python解释器正确解析的数据结构都是优雅的格式。
格式化的表达式尽可能保持在一行,但如果长度超过格式化的宽度参数,则分成多行。pprint 输出的一个独特功能是在格式化显示表示之前自动对字典进行排序。
PrettyPrinter类
pprint 模块包含 PrettyPrinter 类的定义。它的构造函数采用以下格式 -
句法
pprint.PrettyPrinter(indent, width, depth, stream, compact)
参数
indent - 定义在每个递归级别添加的缩进。默认值为 1。
宽度- 默认为 80。所需的输出受此值限制。如果长度大于宽度,则会分成多行。
深度- 控制要打印的级别数。
流- 默认情况下 std.out - 默认输出设备。它可以采用任何流对象,例如文件。
紧凑- id 默认设置为 False。如果为 true,则仅显示宽度内可调的数据。
PrettyPrinter 类定义了以下方法 -
pprint() 方法
打印 PrettyPrinter 对象的格式化表示。
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() 方法,首先要设置 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__() 方法返回玩家对象的字符串表示形式 -
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]}}