一看就懂的Python输入和输出、格式化字符串方法
可以以多种形式输出程序:我们可以以人类可读的形式将数据打印到屏幕上,或者将数据写入文件供后续使用。
格式化输出
到目前为止,在 Python 输出值有两种方法:表达式句子和 print() 函数。(第三种方法是使用文件对象 write() 方法可参考标准文件的输出 sys.stdout 方法,详情请参考库参考手册。)
通常,你想要更多的格式控制程序的输出结果,而不是简单地打印以空格为分隔符的值。在 Python 格式化输出的方法有以下几种:
使用 f-strings 字符串。这种字符串需要在引号标记前使用 f 或者 F 开始使用字符串。您可以使用它 { 和 } 包裹想要嵌入字符串中 Python 表达式可以是变量或字面值 。
>>>year=2016;event='Referendum' >>>f'Resultsofthe{year}{event}' 'Resultsofthe2016Referendum'
str.format() 这是格式化字符串的第二种方法。与第一种方法相比,这种方法需要您更多的操作。您仍然可以在字符串中使用它 { 和 } 嵌入变量,也可以进行详细的格式化设计。但这要求您提供相应的格式化内容。
当然,您也可以通过字符串的切片操作和连接操作来完成字符串的格式化处理。这种方法可以创建任何你想要的格式化形式。在 string 该类型包含了一些按指定列宽填充字符串的方法。
如果您只想在调试过程中打印一些变量而不进行格式化输出,您也可以使用它 repr() 函数或者 str() 函数将任意值转化为字符串。
str() 函数可以以人类可读的形式呈现, repr() 函数是以解释器可读的形式呈现值(如果没有相应的转换语法,就会产生值。 SyntaxError 异常)。如果一个物体不适用于人类可读的形式,那么 str() 函数的返回值和 repr() 函数相同。在 Python 在数值、链表、字典等结构中,上述两个函数都有自己统一的呈现方式。但对于字符串,上述两个函数都有自己独特的呈现方式。
如下示例:
>>>s='Hello,world.' >>>str(s) 'Hello,world.' >>>repr(s) "'Hello,world.'" >>>str(1/7) '0.14285714285714285' >>>x=10*3.25 >>>y=200*200 >>>s='Thevalueofxis'+repr(x)+',andyis'+repr(y)+'...' >>>print(s) Thevalueofxis32.5,andyis4000000... >>>#对于字符串,repr()函数会添加引号和反斜杠: ...hello='hello,world\n' >>>hellos=repr(hello) >>>print(hellos) 'hello,world\n' >>>#repr()函数的参数也可以是Python对象: ...repr((x,y,('spam','eggs'))) "(32.5,40000,('spam','eggs'))"
string 模块包含 Template 类为字符串中嵌入变量提供了额外的方法。这种方法使用占位符,例如 $x 嵌入变量,变量值存储在字典中。该方法对字符串的格式控制较少。
格式化字符串文字
格式化字符串文字 (简称 f-strings )允许您在字符串中包含 Python 表达值的方法是在字符串前加入 f 或者 F ,并写出表达式 {expression} 格式。
格式描述符可以添加到表达式后面。这可以更好地控制表达式值的输出格式。以下示例将 PI 舍入小数位数后三位。
>>>importmath >>>print(f'Thevalueofpiisapproximately{math.pi:.3f}.')
在':'然后添加一个整数来表示字段的最小字符数,这对排序非常有用。
>>>table={'Sjoerd':4127,'Jack':4098,'Dcab':7678} >>>forname,phoneintable.items(): ...print(f'{name:10}==>{phone:10d}') ... Sjoerd==>4127 Jack==>4098 Dcab==>7678
也可以使用其他修饰符来转换格式化值。'!a'表示应用ascii()函数 ,'!s'表示应用str()函数, 另外'!r'表示应用repr()函数:
>>>animals='eels' >>>print(f'Myhovercraftisfullof{animals}.') Myhovercraftisfullofeels. >>>print('Myhovercraftisfullof{animals!r}.') Myhovercraftisfullof'eels'.
参考这些格式规范,请参考参考指南 最小字符串格式化。
format () 字符串格式化方法
str.format() 基本使用方法如下:
>>>print('Wearethe{}whosay"{}!"'.format('knights','Ni')) Wearetheknightswhosay"Ni!"
括号和字符(称为格式字段)将被引入str.format()替换方法中的对象。括号中的数字可以用来表示传递给str.format()方法对象的位置。
>>>print('{0}and{1}'.format('spam','eggs')) spamandeggs >>>print('{1}and{0}'.format('spam','eggs')) eggsandspam
假如在str.format()方法中使用的关键字参数,其值等于参数名称对应的值。
>>>print('This{food}is{adjective}.'.format( ...food='spam',adjective='absolutelyhorrible')) Thisspamisabsolutelyhorrible.
可任意组合位置和关键字参数:
>>>print('Thestoryof{0},{1},and{other}.'.format('Bill','Manfred', other='Georg')) ThestoryofBill,Manfred,andGeorg.
如果你有一个不想拆分的长字符,使用名称而不是位置格式化将是一个更好的方法。这可以简单地使用'[]'获取字典中键的符号
>>>table={'Sjoerd':4127,'Jack':4098,'Dcab':8637678} >>>print('Jack:{0[Jack]:d};Sjoerd:{0[Sjoerd]:d};' ...'Dcab:{0[Dcab]:d}'.format(table)) Jack:4098;Sjoerd:4127;Dcab:8637678
也可以使用上述方法 '**' 传递字典中的信息。
>>>table={'Sjoerd':4127,'Jack':4098,'Dcab':8637678} >>>print('Jack:{Jack:d};Sjoerd:{Sjoerd:d};Dcab:{Dcab:d}'.format(**table)) Jack:4098;Sjoerd:4127;Dcab:8637678
传统字符串格式化方法
操作符 '%' 也可用于格式化字符串。它将操作符的左参数解释为'sprintf ()' 操作符右侧参数采用样式字符串,并返回字符串。例如:
>>>importmath >>>print('Thevalueofpiisapproximately%5.3f.'%math.pi) Thevalueopisapproximately3.142.