输入和输出
有几种方法可以显示程序的输出;数据可以以人类可读的形式输出,也可以写入文件以供将来使用。
输出格式化
到目前为止,我们遇到了两种输出值的方法:表达式语句和 print() 函数。(第三种方法是使用文件对象的 write() 方法;标准输出文件可以引用为 sys.stdout。)
通常,我们希望对输出的格式进行更多的控制,而不是简单地打印以空格分隔的值。有几种方法可以格式化输出。
● 要使用格式化的字符串字面量,请在开始引号或三重引号前以 f 或 F 开头字符串。在这个字符串中,可以在 { 和 } 个字符之间编写 Python 表达式,该表达式可以引用变量或文字值。
year = 2021target = '没有实现'print(f'我的{year}目标{target}')
运行结果:
我的2021目标没有实现
● 字符串的 str.format() 方法需要更多的手动工作。仍然使用 { 和 } 来标记变量将被替换的位置,并且可以提供详细的格式化指令,但是还是需要提供要格式化的信息。
yes_votes = 123no_votes = 67percentage = yes_votes / (yes_votes + no_votes)print('{:-3} 赞成票,占比:{:3.3%}'.format(yes_votes, percentage))
运行结果:
123 赞成票,占比:64.737%
● 最后,可以通过使用字符串切片和连接操作来创建可以想到的任何布局,从而完成所有字符串处理。字符串类型有一些方法可以执行有用的操作,将字符串填充到给定的列宽。
当不需要花哨的输出,而只是想快速显示一些变量以用于调试时,可以使用 repr() 或 str() 函数将任何值转换为字符串。
str() 函数的目的是返回具有可读性的值的表示,而 repr() 函数的目的是生成可以被解释器读取的表示(或者如果没有等效的语法,将强制执行 SyntaxError)。对于没有特定表示便于人类阅读的对象,str() 将返回与 repr() 相同的值。许多值,如数字或结构,如列表和字典,使用这两个函数都有相同的表示。特别是字符串,有两种不同的表示方式。
一些例子:
s = 'Hello, world.'print(str(s))print(repr(s))print(str(1/7))x = 10 * 3.25y = 200 * 200s = 'x :' + repr(x) + ', y :' + repr(y)print(s)hello = 'hello, world\n'hellos = repr(hello)print(hellos)print(repr((x, y, ('烂番茄', '臭鸡蛋'))))
运行结果:
Hello, world.'Hello, world.'0.14285714285714285x :32.5, y :40000'hello, world\n'(32.5, 40000, ('烂番茄', '臭鸡蛋'))
string 模块包含一个 Template 类,它提供了另一种将值替换为字符串的方法,使用诸如 $x 之类的占位符并用字典中的值替换它们,但是提供的格式控制要少得多。
格式化字符串文本
格式化字符串文本(也简称为f字符串)允许在字符串中包含 Python 表达式的值,方法是在字符串前面加上 f 或 F,并将表达式写为 {expression}。
表达式后面可以有一个可选的格式说明符。这样可以更好地控制值的格式。以下示例将 pi 四舍五入到小数点后三位:
import mathprint(f'PI 值:{math.pi:.3f}.')
运行结果:
PI 值:3.142.
在 ':' 之后传递一个整数将使该字段能保持一个最小宽度。这对于使列对齐很有用。
table = {'刘备': 55, '关羽': 52, '张飞': 46}for name, age in table.items():print(f'{name:10} ==> {age:10d}')
运行结果:
刘备 ==> 55关羽 ==> 52张飞 ==> 46
在格式化之前,可以使用其他修饰符转换值。'!a' 应用 ascii(),'!s' 应用 str(),和 '!r' 应用 repr():
animal = '狗'print(f'我最喜欢的动物是 {animal}.')print(f'我最喜欢的动物是 {animal!r}.')print(f'我最喜欢的动物是 {animal!a}.')print(f'我最喜欢的动物是 {animal!s}.')
运行结果:
我最喜欢的动物是 狗.我最喜欢的动物是 '狗'.我最喜欢的动物是 '\u72d7'.我最喜欢的动物是 狗.
官方文档:
https://docs.python.org/3.9/tutorial/inputoutput.html




