首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Python 中的 f-string
基本的字符串格式化
f-string 的限制
格式化一个表达式
使用 f-string 来调试代码
格式化数字的不同进制
用 f-string 打印对象
使用f-string设定浮点数精度
将一个数字格式化为百分数
调整或者增加 f-string 的填充
转义符号
使字符串居中
格式化千分位
使用科学计数法显示一个数字
在 f-string 中使用 if-else
在 f-string 中使用字典
用 f-string 拼接字符串
格式化 datetime 对象
修复f-string的非法格式错误
在字符串前补零
处理多行f-string
当前位置:
首页>>
技术小册>>
Python合辑5-格式化字符串
小册名称:Python合辑5-格式化字符串
可以用f-string打印自定义对象。默认设置是,如果向f-string表达式传递了一个对象,它将会显示该对象 __str__ 方法的返回值。不过,也可以用显式转换操作标志来打印__repr__的值。 ● !r - 使用 repr() 将值转化为文本. ● !s - 使用 str() 将值转化为文本. ``` >>> class Color: def __init__(self, r: float = 255, g: float = 255, b: float = 255): self.r = r self.g = g self.b = b def __str__(self) -> str: return "A RGB color" def __repr__(self) -> str: return f"Color(r={self.r}, g={self.g}, b={self.b})" >>> c = Color(r=123, g=32, b=255) # 如不加任何操作符, 会打印 __str__ 的值 >>> f"{c}" 'A RGB color' # 用`obj!r` 的话会打印 __repr__ 的值 >>> f"{c!r}" 'Color(r=123, g=32, b=255)' # 使用!s跟默认值一样 >>> f"{c!s}" 'A RGB color' ``` Python也允许通过定义不同类型使用__format__方法控制格式化结果,下面的例子会展示所有可能情况。 ``` >>> class Color: def __init__(self, r: float = 255, g: float = 255, b: float = 255): self.r = r self.g = g self.b = b def __str__(self) -> str: return "A RGB color" def __repr__(self) -> str: return f"Color(r={self.r}, g={self.g}, b={self.b})" >>> c = Color(r=123, g=32, b=255) # When no option is passed, the __str__ result is printed >>> f"{c}" 'A RGB color' # When `obj!r` is used, the __repr__ output is printed >>> f"{c!r}" 'Color(r=123, g=32, b=255)' # Same as the default >>> f"{c!s}" 'A RGB color' Python also allows us to control the formatting on a per-type basis through the __format__ method. The following example shows how you can do all of that. >>> class Color: def __init__(self, r: float = 255, g: float = 255, b: float = 255): self.r = r self.g = g self.b = b def __str__(self) -> str: return "A RGB color" def __repr__(self) -> str: return f"Color(r={self.r}, g={self.g}, b={self.b})" def __format__(self, format_spec: str) -> str: if not format_spec or format_spec == "s": return str(self) if format_spec == "r": return repr(self) if format_spec == "v": return f"Color(r={self.r}, g={self.g}, b={self.b}) - A nice RGB thing." if format_spec == "vv": return ( f"Color(r={self.r}, g={self.g}, b={self.b}) " f"- A more verbose nice RGB thing." ) if format_spec == "vvv": return ( f"Color(r={self.r}, g={self.g}, b={self.b}) " f"- A SUPER verbose nice RGB thing." ) raise ValueError( f"Unknown format code '{format_spec}' " "for object of type 'Color'" ) >>> c = Color(r=123, g=32, b=255) >>> f'{c:v}' 'Color(r=123, g=32, b=255) - A nice RGB thing.' >>> f'{c:vv}' 'Color(r=123, g=32, b=255) - A more verbose nice RGB thing.' >>> f'{c:vvv}' 'Color(r=123, g=32, b=255) - A SUPER verbose nice RGB thing.' >>> f'{c}' 'A RGB color' >>> f'{c:s}' 'A RGB color' >>> f'{c:r}' 'Color(r=123, g=32, b=255)' >>> f'{c:j}' --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-20-1c0ee8dd74be> in <module> ----> 1 f'{c:j}' <ipython-input-15-985c4992e957> in __format__(self, format_spec) 29 f"- A SUPER verbose nice RGB thing." 30 ) ---> 31 raise ValueError( 32 f"Unknown format code '{format_spec}' " "for object of type 'Color'" 33 ) ValueError: Unknown format code 'j' for object of type 'Color' ``` 最后,还有个用来转义ASCII字符的a操作符。更多信息可参考: docs.python.org/3/library/functions.html#as.. ``` >>> utf_str = "Áeiöu" >>> f"{utf_str!a}" "'\\xc1ei\\xf6u'" ```
上一篇:
格式化数字的不同进制
下一篇:
使用f-string设定浮点数精度
该分类下的相关小册推荐:
Python编程轻松进阶(四)
Python爬虫入门与实战开发(上)
Python机器学习基础教程(上)
Python数据分析与挖掘实战(上)
Python高并发编程与实战
Python甚础Django与爬虫
Python编程轻松进阶(一)
Python编程轻松进阶(三)
实战Python网络爬虫
剑指Python(万变不离其宗)
Python机器学习实战
Python自动化办公实战