30.Python:格式化字符串

前言

前面在学习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()函数美化输出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269