30.Python:格式化字符串

作者: TensorFlow开发者 | 来源:发表于2018-07-14 00:27 被阅读10次

    前言

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

    相关文章

      网友评论

        本文标题:30.Python:格式化字符串

        本文链接:https://www.haomeiwen.com/subject/twlepftx.html