格式化字符串
为什么需要格式化字符串
在字符串中需要根据情况在指定位置显示可能会改变的内容时, 可以先指定一个占位符,字符串尾巴处再规定填进这些占位符的变量
比如奖状就是一个典型的需要使用格式化字符串的场景, 在这么一个空白的奖状中, 下划线( __ ) 处将要填入获奖人的姓名, 以及在哪个学期, 被评为什么奖, 这里下划线( __ ) 相当于占位符
格式化字符串的方式
根据顺序将变量填入占位符
1. %s为占位符
1.1 这种方式的语法结构为 "XXXXXX%sXXXXXX"%a , 其中左边引号为字符串开始的标志, XXX代表任意字符, %s是占位符,相当于奖状中的下划线( __ ) ,
右边引号为字符串结束的标志, 字符串后跟一个百分号% , % 后为将要填入占位符的变量名, 变量a的值会填入占位符的位置处
1.2 字符串中有2个或多个变量时, 语法结构为"XXXXX%sXXXXX%sXXXXX"%(a,b) , 这里与只有一个变量时的唯一的区别是占位符多了, %后面的变量需要用小括号括起来了
1.3 举例:
name = '小明'
year = '2019-2020'
term = 2
title= 'python学习小达人'
print("%s同学, 在%s学年第%s学期被评为%s, 特发此状, 以资鼓励"%(name,year,term,title))
打印出的结果为: "小明同学, 在2019-2020学年第2学期被评为python学习小达人, 特发此状, 以资鼓励"
案例中就是将%号后面小括号里的变量的值按照顺序填入字符串的对应位置的占位符中
2. {} 为占位符
2.1 这种方式的语法为"XXXXX{}XXXXX".format(a) , 其中左边引号为字符串开始标志,XXX为任意字符, {}为占位符, 右边引号为字符串结束标志, 字符串结束后紧跟着一个.format(a) , 括号中a为变量名
在执行时,变量a的值会填入{}占位符所在的位置
2.2 字符串中有2个或多个变量时, 语法结构为"XXXXX{}XXXXX{}XXXXX".format(a,b) , 这里与只有一个变量时的唯一的区别是占位符多了, %后面的变量也多了一个
2.3 举例:
name = '小明'
year = '2019-2020'
term = 2
title= 'python学习小达人'
print("{}同学, 在{}学年第{}学期被评为{}, 特发此状, 以资鼓励".format(name,year,term,title))
打印出的结果为: "小明同学, 在2019-2020学年第2学期被评为python学习小达人, 特发此状, 以资鼓励"
案例中就是将format中的变量的值按照顺序填入字符串的对应位置的占位符中
忽略变量和占位符顺序的方式
3. format 方式
通过给方式2中的占位符起个名字, 达到忽略顺序的目的
语法结构: "XXXXX{v1}XXXXX{v2}XXXX".format(v1=name,v2=year) , 其中{}为占位符, {v1} 表示给这个占位符起名为v1, {v2}表示给暂未符起名为v2 , 在format() 中v1, v2的顺序就没关系了,
因为,后续是以key-value 的形式给出的, 自然顺序就不重要了 , 所以 "XXXXX{v1}XXXXX{v2}XXXX".format(v1=name,v2=year)和"XXXXX{v1}XXXXX{v2}XXXX".format(v2=year,v1=name) 得到的结果是一样的
此处, 一般给暂未符起名字的时候, 为了省事儿, 一般都是直接使用将要填入的变量的名字,即: "XXXXX{name}XXXXX{year}XXXX".format(name=name,year=year)
举例:
name = '小明'
year = '2019-2020'
term = 2
title= 'python学习小达人'
print("{name}同学, 在{year}学年第{term}学期被评为{title}, 特发此状, 以资鼓励".format(name=name,year=year,term=term,title=title))
打印出的结果: "小明同学, 在2019-2020学年第2学期被评为python学习小达人, 特发此状, 以资鼓励"
4. 通过在字符串前加一个f字符
语法结构: f"XXXXX{name}XXXXX{year}XXXXX" 此时, 因为有f作为标志, Python会直接将变量的值填入占位符{} 中
举例:
name = '小明'
year = '2019-2020'
term = 2
title= 'python学习小达人'
print(f"{name}同学, 在{year}学年第{term}学期被评为{title}, 特发此状, 以资鼓励")
打印出的结果: "小明同学, 在2019-2020学年第2学期被评为python学习小达人, 特发此状, 以资鼓励"