史上最全的Python字符串格式化【字符串模板】总结【学习Python的第一天,记录总结一下,以备不时之需】

本文介绍了Python中多种字符串格式化的方法,包括使用%s、f-string、{}

wc 老外直呼内行

方法一: 使用%s格式化

方法二: 使用字母f加字符串格式化,与方法三类似

方法三: 方法三:使用{}格式化

方法三: 使用 string 的Template对象格式化

贴上代码直接直观感受一下吧

学习Python的第一天,记录总结一下,以备不时之需

import datetime
from string import Template
if __name__ == '__main__':
   
    # 格式化的语法: "{" [field_name] ["!" conversion] [":" format_spec] "}"
    # 解释:            { [xxx.属性名|数字[数字|属性]]  [![s|a|r]]  [":" format_spec] }
    name = "lin jian hui 来啦"
    name1 = "hah"
    # 每天不上进,不思进取,被女朋友罚抄 我要好好学习天天向上 100遍
    # 【在java中要使用for循环,在Python中直接使用 字符串 * 次数即可 so easy】
    print("Good good study ,day day up \n" * 100)
    # 方法一:使用%s格式化
    # 注意 python 2.6以前使用的是%s 格式化的
    print("%s" % name)
    print("%s,%s" % (name, name1))
    # 方法二:使用字母f加字符串格式化,与方法三类似
    print(f"hello world, {name}")
    # 方法三:使用{}格式化
    # 注意 python 2.6及以后 可以使用的是%s格式化,但更多的使用{}占位符格式化,我的版本是python 3.10
    # 可以使用key=value的形式格式化字符串,花括号的中的名字和format中的key相同即可,key和value的值可以一样
    print("My name is {name},I am {age} years old".format(name=name, age=20))
    print("My name is {name},I am {age} years old".format(name=name1, age=18))
    # 以下两行等价, 下标占位符可以任意指定,但要把握分寸,不能越界
    print('{0}, {1}, {2}'.format('a', 'b', 'c'))
    print('{} {}, {}'.format('a', 'b', 'c'))
    # 可以拆包 并合理指定位置
    print('{2}, {1}, {0}'.format(*'abc'))
    # 下标占位符可以重复
    print('{0},{1},{0}'.format('abra', 'cad'))
    # 如果就要表达花括号 而不是特殊字符,使用两个相同即可
    print('{{,}} 我是{0}'.format('共产党员'))
    # 定义一个dictionary object【字典对象】 在java中相当于 json 对象
    person = {"name": "lin jian hui ", "age": 18, "country": "中国"}
    # 定义一个数字列表
    numberList = [12, 34, 56]
    # {0.xxx属性} 表示第一个参数的xxx属性,其它以此类推
    print("Name is {0[name]}".format(person))
    print("Name is  {name}".format(name=person["name"]))
    # 通过字典设置格式化参数,占位符的key可以字典中的key一致即可
    print("通过关键词参数设置字典格式化参数:\n姓名:{name}, 年龄:{age},国家:{country}".format(**person))
    # 一次性传入多个参数
    print("数字列表:\n数字1={}, 数字2={},数字3={}".format(*numberList))
    # 关键字参数的第一个元素
    personList = [person]
    print("Fisrt person is : {personList[0]}".format(personList=personList))
    print("Fisrt person is : {}".format(personList[0]))
    # !s 表示调用str()方法,!r表示调用repr()方法【返回正规的字符串】,!a表示调用ascii() # 暂时不知道有该在什么场景下用
    print("我是{0!s}\n,{0!r}\n,{0!a}".format(person))
    # 0代表第一个参数【其它以此类推】,当且仅当只有一个占位符的时候0可以省略
    print("格式化数字:千分位加逗号 {0:4,d}\n格式化数字:千分位加逗号 {0:,}".format(12345678))
    # 填充 < 表示左对齐; > 表示右对齐; ^表示居中对齐; = 只对有符号的数字有效【用处不大】
    # {位置参数:[要填充的字符串,不填默认空格][<|>|=|^][总长度,是一个数字]}
    print('{0:=<30}'.format('左对齐,不足30填充等号'))
    print('{0:*>30}'.format('右对齐,不足30填充星号'))
    print('{0:$^30}'.format('居中对齐,不足30填充美元符号'))
    print('等号填充{0:==30}'.format(30))
    # 0代表第一个参数【其它以此类推】
    print("十进制数: {0:d};  十六进制数: {0:x};  八进制数: {0:o};  二进制数: {0:b}".format(42))
    print("十进制数: {0:d};  十六进制数: {0:#x};  八进制数: {0:#o};  二进制数: {0:#b}".format(42))
    print("保留2位小数: {0:.2f}".format(42))
    print("百分比保留2位小数: {0:.2%}".format(42 / 100))
    print("格式化日期: {:%Y-%m-%d %H:%M:%S}".format(datetime.datetime.now()))
    """ 
        推导式填充 < 表示左对齐; > 表示右对齐; ^表示居中对齐 
        在此例子中将<^>作为变量
        left<<<<<<<<<<<<
        ^^^^^center^^^^^
        >>>>>>>>>>>right
    """
    for align, text in zip('<^>', ['left', 'center', 'right']):
        print('{0:{fill}{align}16}'.format(text, fill=align, align=align))
    """ 
           推导式填充 dXob 分别代表十进制、十六进制、八进制、二进制
           在此例子中将dXob作为变量
    """
    for num in range(5, 12):
        for base in 'dXob':
            print('{0:{width}{base}}'.format(num, base=base, width=5), end=' ')
        print()
    # 方法四
    # 扩展 使用 string 的Template对象格式化:
    # 参数为字典对象,占位符格式为:$属性名 ,使用 安全的safe_substitute(dictObj)方法 当key不存在时,原样输出,而不是抛出异常
    # 导入对象template :from string import Template
    print(Template('$name likes $what').safe_substitute(dict(name="lin jian hui", age="18")))

学霸之所能成为学霸,是因为当看到一道题没有思路的或无从入手时,学霸早就已经联想到可行的几种解决方案,并在开始思考那种方法是最优解了

学到了就要教人,赚到了就要给人,欢迎有问题一起探讨,交流分享!
你现在多努力一分,以后老婆就多漂亮一分!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值