f-string 远比你想象的强大
f-string 自从python3.6 版本被引入以后,极大的提高了开发人员在字符串格式化上效率,我们现在都知道如何使用它,但它的一些深藏特性还不被人所熟知,今天就来介绍一下f-string 的强大功能
1. 使用strftime 语法格式化日期
from datetime import datetime
now = datetime.now() print(now.strftime("%Y-%m-%d")) print(f"{now:%Y-%m-%d}")
|
2. 设置对齐方式
为了让多行数据在格式化以后能够更加美观,你可以设置格式化以后的对齐方式
word = "hello"
print(f"{word:*^10}") print(f"{word:*>10}") print(f"{word:*<10}")
|
程序输出
**hello*** *****hello hello*****
|
- 10 表示格式化以后的字符串的长度
- ^ 表示居中,> 表示右对齐 < 表示左对齐
- * 表示出了word以外部分的填充字符
为了演示方便,我填充了* , 你可以将其修改为其他字符,或者去掉填充字符
word = "hello"
print(f"{word:^10}") print(f"{word:>10}") print(f"{word:<10}")
|
程序输出
3. 格式化类的对象
class User: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name
def __str__(self): return f"{self.first_name} {self.last_name}"
def __repr__(self): return f"User's name is: {self.first_name} {self.last_name}"
user = User("小", "明")
print(f"{user}") print(f"{user!r}")
|
对一个对象实例进行格式化,会自动调用其__str__方法,想要调用__repr__ 可以在表达式里添加!r。其实这种格式化方法在字符串的format方法里也是可行的。
4. 嵌套f-string
在格式化时,可以嵌套多层
number = 324.4356
print(f'{f"{number:.2f}":>10}')
|
最里面一层格式化保留两位小数,最外层格式化要求格式化以后字符串长度为10且右对齐。
class AgeFormt(): def __format__(self, format_spec): format_spec = int(format_spec) if format_spec < 14: return f"年龄小于14岁" else: return f"年龄大于等于14岁"
format = AgeFormt() age = 9 print(f"{format:{age}}")
age = 15 print(f"{format:{age}}")
|
实现__format__方法,可以将格式化的逻辑写在专门的格式化类里,让主逻辑更加简洁。