# 1. 引言
# 2. %s
# 3. str.format()
## 3.1 位置参数
## 3.2 关键字参数
## 3.3 通过对象
官方建议,格式化字符串时使用"format"代替使用"%",因为可读性更强;但是为了读懂源码,我们需要两者都学会才行
一般为 2 种形式,第一种多个格式化字符串需要传值的时候是按照前后顺序来传值的,这就带来一个问题:数量多了以后,很难清楚哪一个占位符对应哪一个实参.
因此参数较多的情况下,我们用字典赋值,%(name)s 对应 {"name":"LIUYU"}.
但是此种形式,需要先验知识背书,即你知道%s这个奇形怪状的东西是什么,可读性也不是很好,于是有了str.format().
print("hello.My name is {name}, I'm from {nationality}".format(name='LIUYU',nationality='China'))
可以说,str.format() 是Python最为推荐的字符串格式化方法
print("{},{}".format('LIUYU','China')) print("{1},{0},{1}".format('LIUYU','China')) li = ['LIUYU','China'] print("{},{}".format(*li)) LIUYU,China China,LIUYU,China LIUYU,China
注意,传入列表是用*,若是不用*,则会把li当成一个列表去处理,即0表示li是format里的下标为0的参数,而这个参数是个列表,可以[0],尊重数据结构了属于是.
print('name is {0[0]} age is {0[1]}').format(li) # output: name is LIUYU age is 20
print("hello.My name is {name}, I'm from {nationality}".format(name='LIUYU',nationality='China')) dict = {'name':'LIUYU','nationality':'China'} print("{name},{nationality}".format(**dict))
注意,传入字典是用**,如果不用的话,应该也要尊重一波数据结构:
dict = {'name':'LIUYU','nationality':'China'} print("{0[name]},{0[nationality]}".format(dict)) # output: LIUYU,China
class Person: def __init__(self, name, age): self.name, self.age = name, age def __str__(self): return 'This guy is {self.name},who is {self.age} years old.'.format(self=self) print(Person('LIUYU', 20)) # output: This guy is LIUYU,who is 20 years old.
参考文章