30.Python:格式化字符串
2018-07-14 本文已影响10人
TensorFlow开发者
前言
前面在学习Python编程中的其他知识时,为了方便验证运行结果,我们通常的做法是:打印输出。当时只是顺便拿来用,并没有系统完整地学习。今天我们来完整、系统地学习Python中的格式化字符串和文件读写。
格式化字符串(2种方式)
- 格式化的字符串文字(也即:f字符串)
提示:这一种是python3.6版中的新功能。如果要使用,请更新到3.6及以后版本哦
格式化的字符串文字也简称为f字符串,是允许通过在字符串前加上f
或者F
将表达式写为字符串,在字符串中包含Python表达式的值, 格式形如:f'这里是格式化字符串举例, 变量值为:{变量}'
例如:
import math
print(f'The value of pi is approximately {math.pi:.3f}.')
注意:在冒号:
之后传递一个整数将导致该字段为最小字符数。这对于排列很有用。
-
str.format()
str.format()
的基本使用如下:
print('{}年第{}届世界杯在{}盛大举行。'.format(2018, 21, '俄罗斯'))
运行结果:2018年第21届世界杯在俄罗斯盛大举行。
括号{}
及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换。
在括号{}中的数字用于指向传入对象在format()
中哪个位置的数据,如下所示:
print('周末,{0}约了{1}。'.format('李雷', '韩梅梅'))
print('周末,{1}约了{0}。'.format('李雷', '韩梅梅'))
运行结果:
周末,李雷约了韩梅梅。
周末,韩梅梅约了李雷。
要注意不要索引值不要越界,否则会报错:
print('周末,{2}约了{0}。'.format('李雷', '韩梅梅'))
运行结果:
File "F:/python_projects/io_file/print_repr.py", line 7, in <module>
print('周末,{2}约了{0}。'.format('李雷', '韩梅梅'))
IndexError: tuple index out of range
如果在 format()
中使用了关键字参数, 那么它们的值会指向使用该名字的参数。例如:
print('{name}的官方网址是{website}'.format(name="Python", website="www.python.org"))
运行结果:
Python的官方网址是www.python.org
旧式字符串格式化
如果需要格式化单个参数,则值可以是单个非元组对象。 否则,值必须是具有格式字符串指定的项目数的元组,或者是单个映射对象(例如,字典)。
# 需要格式化一个参数,可以按照下面两种格式:
print('pi的值约为:%.2f' % math.pi)
print('pi的值约为:%.6f' % (math.pi, ))
# 需要格式化多个参数,必须使用元组或字典
print('%d年第%d届世界杯在%s盛大举行。' % (2018, 21, '俄罗斯'))
print('%(year)d年第%(no.)d届世界杯在%(place)s盛大举行。' % {'year':2018, 'no.':21, 'place':'俄罗斯'})
运行结果:
pi的值约为:3.14
pi的值约为:3.141593
2018年第21届世界杯在俄罗斯盛大举行。
2018年第21届世界杯在俄罗斯盛大举行。
repr()函数
返回包含对象的可打印表示的字符串。对于许多类型,此函数尝试返回一个字符串,该字符串在传递时会产生具有相同值的对象eval()
,否则表示形式是一个括在尖括号中的字符串,其中包含对象类型的名称以及其他信息通常包括对象的名称和地址。类可以自定义 repr()
,具体是通过重写类中的__repr__ ()
方法来控制此函数为其实例返回的内容,需要输出什么格式,就在__repr__ ()
中返回什么格式的字符串即可。
class Dog(object):
name = '未取名'
color ='白色'
def eat(self):
print("小狗在啃骨头")
d = Dog()
d.name = "阿黄"
d.color = '黄色'
print(d)
s = repr(d)
print(s)
运行结果:
<__main__.Dog object at 0x000002071CAE81D0>
<__main__.Dog object at 0x000002071CAE81D0>
在类种重写__repr__ ()
,如下:
class Dog(object):
name = '未取名'
color ='白色'
def eat(self):
print("小狗在啃骨头")
# 重新定义__repr__
def __repr__(self):
return "狗名为:" + self.name + ",毛色为:" + self.color
d = Dog()
d.name = "阿黄"
d.color = '黄色'
print(d)
s = repr(d)
print(s)
运行结果:
狗名为:阿黄,毛色为:黄色
狗名为:阿黄,毛色为:黄色
小结
本文重点学习了字符串的格式化:f字符串和s.format(),以及通过重新定义repr()函数美化输出。