在 Python 2.6 之前,可以使用 % 操作符进行字符串的格式化。例如:
>>> name = "Michael"
>>> print("Hello everyone, my name is %s." % name)
Hello everyone, my name is Michael.
如果需要插入的变量数大于 1,需要将这些变量放到一个元组里。
>>> name = "Michael"
>>> age = 20
>>> print("Hello everyone, my name is %s, I am %d years old." % (name, age))
Hello everyone, my name is Michael, I am 20 years old.
以上当变量的个数较少时,使用 % 操作符格式化字符串的可读性还是比较强的。但是当变量的个数变多时,可读性会变差,并且容易出错。例如:
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is %s %s, I am %d years old, I am a %s, I have writed %d novels." % (first_name, last_name, age, profession, num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.
在 Python 2.6 版本中,引入了 format()
方法。format()
方法是对 % 操作符的改进,上面使用 % 操作符的格式化可以对应的改成如下形式:
>>> name = "Michael"
>>> print("Hello everyone, my name is {}.".format(name))
Hello everyone, my name is Michael.
>>> name = "Michael"
>>> age = 20
>>> print("Hello everyone, my name is {}, I am {} years old.".format(name, age))
Hello everyone, my name is Michael, I am 20 years old.
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is {} {}, I am {} years old, I am a {}, I have writed {} novels.".format(first_name, last_name, age, profession, num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.
在 format()
方法中,由于可以通过索引来引用参数,所以上面例子中 format 的参数顺序不是必须为 first_name、last_name、age、profession、num,我们可以将参数的顺序修改为 age、profession、last_name、first_name、num,然后通过参数的索引来引用参数。age 的索引为 0,profession 的索引为 1,以此类推。
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is {3} {2}, I am {0} years old, I am a {1}, I have writed {4} novels.".format(age,profession,last_name,first_name,num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.
除了可以通过索引来访问 format()
的参数外,还可以通过参数名来访问参数,例如:
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is {first_name} {last_name}, I am {age} years old, I am a {profession}, I have writed {num} novels.".format(age=age,profession=profession,last_name=last_name,first_name=first_name,num=num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.
format()
方法在可读性方面比 % 操作符有了较大的改进,但是当参数个数较多时,依然比较容易出错。
在 Python 3.6 版本中,引入了 formatted string literals,简称 f-string。f-string 在语法方面和 format()
类似,但是更加简洁。使用 f-string 可将上述例子修改如下:
>>> name = "Michael"
>>> print(f"Hello everyone, my name is {name}.")
Hello everyone, my name is Michael.
>>> name = "Michael"
>>> age = 20
>>> print(f"Hello everyone, my name is {name}, I am {age} years old.")
Hello everyone, my name is Michael, I am 20 years old.
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print(f"Hello everyone, my name is {first_name} {last_name}, I am {age} years old, I am a {profession}, I have writed {num} novels.")
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.
从上面几个例子可以看出,f-string 语法更加简洁,而且不容易出错。由于 f-string 的特性,我们不但可以在 {} 中放置变量名,而且可以放置任何有效的表达式。例如:
>>> print(f"{1+2}")
3
在 {} 中,我们还可以进行函数的调用
>>> def to_uppercase(input):
... return input.upper()
>>> name = "Michael Jordan"
>>> print(f"{to_uppercase(name)}")
MICHAEL JORDAN
在类中,我们也可以使用 {}。
>>> class Writer:
... def __init__(self, first_name, last_name, age):
... self.first_name = first_name
... self.last_name = last_name
... self.age = age
... def __str__(self):
... return f"Hello everyone, my name is {self.first_name} {self.last_name}, I am {self.age} years old."
... def __repr__(self):
... return f"Hello everyone, my name is {self.first_name} {self.last_name}, I am {self.age} years old, good!."
...
>>> new_writer = Writer("Michael", "Jordan", 20)
>>> new_writer
Hello everyone, my name is Michael Jordan, I am 20 years old, good!.
>>> print(new_writer)
Hello everyone, my name is Michael Jordan, I am 20 years old.
本文讨论了格式化字符串的几种方式以及他们之间的优劣,为我们选择合适的方法进行字符串的格式化提供指导。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。