第十章、python中常用函数及方法(10.1)------打印函数print()与f‘‘、str.format()、str%()的字符串格式化及函数repr()、ascii()

本文详细介绍了Python中用于字符串格式化的print()函数,以及f-string、str.format()和str%()的方法,包括它们的参数、格式占位符、转换函数如repr()和ascii()的使用。文章通过实例展示了如何利用这些方法进行字符串格式化输出,包括对象引用、描述性字符、进制转换、字符串形式转换、指定宽度和精度、百分比表示、正负号、标志设置以及日期时间格式化等。

目录
10.1 python中的print()与f''、str.format()、str%()字符串格式化及repr()、ascii()
10.1.1 打印函数print()
(1)参数 *objects
(2)参数sep
(3)参数end
(4)参数file
(5)参数flush
(6)print()打印特点
10.1.2 f''、str.format()和str%()的基本形式及格式占位符、repr()、ascii()
(1) f''、str.format()和str%()字符串格式化的基本形式
(2) 格式占位符及函数str()、repr()、ascii()
10.1.3 f''、str.format()和str%()的字符串格式化的具体使用
10.1.3.1 f''、str.format()和str%()格式化表达式中对对象的引用
10.1.3.2 f''、str.format()和str%()格式化表达式增加描述的字符
10.1.3.3 f''、str.format()和str%()格式化表达式中格式占位符的使用
10.1.3.4 f''、str.format()格式化表达式的日期、时间格式使用

第十章、python中常用函数及方法

<think> 我们正在讨论的是在Python中使用f-string多行字符串方法。根据用户的问题和之前的回答,用户已经了解了基本的多行f-string用法,现在可能希望更深入地了解相关细节和高级用法。 首先,回顾一下基本的多行f-string使用: ```python # 基本的多行f-string name = "Alice" age = 30 multiline_string = f""" Name: {name} Age: {age} """ ``` 但是,用户可能还希望了解更复杂的情况,比如: 1. 在多行字符串中嵌入表达式 2. 格式化数字(如用户之前提到的`{FARBDS:.2f}mm`) 3. 处理特殊字符(如大括号) 4. 多行字符串的缩进处理 下面我将详细解释这些点。 ### 1. 多行f-string的基本结构 多行f-string使用三引号(三个单引号或三个双引号)定义,可以在字符串中跨越多行,并且可以在任意位置嵌入表达式(用`{}`括起来)。 ### 2. 嵌入表达式和格式化 在多行f-string中,可以嵌入任意合法的Python表达式,并且可以使用格式说明符进行格式化。例如: ```python FARBDS = 12.3456 multiline_string = f""" 测量报告: 直径: {FARBDS:.2f}mm 面积: {3.14 * (FARBDS/2)**2:.4f} mm² """ ``` 这里,`{FARBDS:.2f}`将浮点数格式化为两位小数,而面积计算则嵌入了一个表达式并格式化为四位小数。 ### 3. 处理大括号 如果需要在f-string中显示字面的大括号,可以使用双大括号进行转义: ```python multiline_string = f""" {{ 这是字面的大括号 变量值: {FARBDS:.2f} }} """ ``` 输出将包含外层的大括号,并在里面显示格式化的变量。 ### 4. 多行字符串的缩进 多行字符串会保留所有空白(包括缩进)。为了避免字符串中包含不必要的缩进,可以使用以下技巧: ```python def get_report(): FARBDS = 12.3456 # 注意:这里字符串的开头引号在下一行,所以第一行是空行,并且后续行的缩进不会被包含 return (f""" 测量报告: 直径: {FARBDS:.2f}mm 面积: {3.14 * (FARBDS/2)**2:.4f} mm² """) # 或者使用textwrap.dedent来去除多余缩进 import textwrap multiline_string = textwrap.dedent(f""" 测量报告: 直径: {FARBDS:.2f}mm 面积: {3.14 * (FARBDS/2)**2:.4f} mm² """) ``` ### 5. 多行字符串中的注释 注意:f-string中不能包含注释(因为`#`在字符串中只是普通字符)。所以,如果需要在多行字符串中写注释,需要放在表达式外面。 ### 6. 复杂表达式和多行表达式 虽然可以在`{}`中写表达式,但为了可读性,复杂的表达式建议先计算出来再放入f-string。但是,如果表达式很长,也可以在多行字符串中跨行写,但必须用括号括起来: ```python multiline_string = f""" 结果: { some_very_long_variable_name + another_long_variable - correction_factor } """ ``` ### 7. 在f-string中使用函数 可以在f-string中调用函数: ```python def area(diameter): return 3.1416 * (diameter/2)**2 FARBDS = 12.3456 multiline_string = f""" 测量报告: 直径: {FARBDS:.2f}mm 面积: {area(FARBDS):.4f} mm² """ ``` ### 8. 对齐和填充 f-string支持高级格式规范,如对齐和填充。例如: ```python name = "Alice" score = 95.5 multiline_string = f""" 学生成绩单: {name:<10}: {score:>5.1f}分 {'Bob':<10}: {87.2:>5.1f}分 """ ``` 这里,`<10`表示左对齐并占用10个字符宽度,`>5.1f`表示右对齐,总宽度5,保留1位小数。 ### 9. 性能考虑 如引用[1][4]所述,f-string在运行时进行求值,其性能优于%格式化str.format()。多行f-string同样具有这一优势。 ### 完整示例 ```python # 定义变量 FARBDS = 12.3456 ERROR = 0.05 # 创建多行f-string report = f""" ===== 精密测量报告 ===== 项目 数值 ------------------- 直径 {FARBDS:.3f} mm 误差范围 ±{ERROR:.3f} mm 面积 {3.1415926 * (FARBDS/2)**2:.4f} mm² ======================= """ print(report) ``` ### 注意事项总结 - 多行f-string使用三引号。 - 表达式可以嵌入在字符串的任意位置。 - 使用双大括号`{{`和`}}`来转义大括号。 - 注意多行字符串的缩进问题,可以使用`textwrap.dedent`去除多余缩进。 - 对于复杂的表达式,考虑先计算再放入f-string,或者用括号括起来跨行书写。 - 可以使用函数调用和表达式,注意格式规范。 希望这些信息能帮助您更好地使用多行f-string。 §§相关问题§§ 1. 如何避免多行f-string中的多余缩进? 2. 在f-string中如何处理字典键名包含特殊字符的情况? 3. f-string中是否支持三目运算符等复杂表达式? 4. 如何在多行f-string中插入换行符而不实际换行(即使用`\n`)? </think> ### Python 中 f-string 多行字符串的使用方法详解 在 Python 中,使用 f-string 创建多行字符串时,需遵循以下规则和技巧: #### 1. **基础语法** 使用三重引号 `"""` 或 `'''` 定义多行 f-string: ```python FARBDS = 12.3456 multiline_string = f""" 测量报告: 直径: {FARBDS:.2f}mm 长度: {OTHER_VALUE:.1f}cm 状态: {'合格' if is_valid else '不合格'} """ ``` #### 2. **格式化嵌入位置** 表达式可嵌入在字符串任意位置: ```python # 开头嵌入 report = f"""{FARBDS:.2f}mm 是主要尺寸 公差范围: ±{tolerance:.3f}mm """ # 中间嵌入 template = f""" ===== 报告 ===== 直径: {FARBDS:.2f}mm ================ """ # 结尾嵌入 summary = f""" 最终测量结果: {FARBDS:.2f}mm """ ``` #### 3. **复杂表达式处理** ```python # 字典值访问(注意引号嵌套) data = {"diameter": 45.6789} report = f""" 产品规格: 直径: {data['diameter']:.2f}mm # 外层双引号+内层单引号 """ # 函数调用 report = f""" 计算面积: {calculate_area(FARBDS):.4f} mm² """ # 条件表达式 status = f""" 检测结果: {'✅ 通过' if FARBDS < 50 else '❌ 失败'} """ ``` #### 4. **特殊字符处理** ```python # 转义大括号 text = f""" {{ 这是字面大括号 }} 实际值: {FARBDS:.2f}mm """ # 包含反斜杠 path = f""" 文件路径: C:\\测量数据\\{file_id}.csv """ ``` #### 5. **格式规范进阶** ```python # 对齐填充 table = f""" | {"项目":<10} | {"数值":>10} | | {"直径":<10} | {FARBDS:>10.2f} | | {"长度":<10} | {length:>10.1f} | """ # 不同进制显示 binary = f""" 二进制: {42:b} 十六进制: {255:#x} """ ``` #### 6. **缩进处理技巧** 使用 `textwrap.dedent()` 消除多余缩进: ```python from textwrap import dedent def generate_report(): return dedent(f""" 测量报告: 直径: {FARBDS:.2f}mm 状态: {'合格' if valid else '不合格'} """) ``` #### 7. **性能注意事项** - f-string 在运行时进行表达式求值,性能优于 `%` 格式化和 `str.format()`[^1][^4] - 复杂表达式建议预计算: ```python # 推荐:先计算再嵌入 area = calculate_area(FARBDS) report = f"""面积: {area:.2f} mm²""" # 不推荐:直接嵌入复杂计算 report = f"""面积: {calculate_area(FARBDS):.2f} mm²""" ``` ### 完整示例 ```python # 数据准备 measurements = { "diameter": 45.6789, "length": 120.543, "tolerance": 0.25, "valid": True } # 多行f-string报告 report = f""" ===== 质量检测报告 ===== {"项目":<15}|{"数值":>10}|{"状态":>8} {"-"*35} {"直径":<15}|{measurements['diameter']:>10.2f}mm|{"✓" if measurements['valid'] else "✗"} {"长度":<15}|{measurements['length']:>10.1f}cm|{"✓" if measurements['valid'] else "✗"} {"公差":<15}|±{measurements['tolerance']:>9.3f}mm| {"="*35} 结论: {'符合' if measurements['valid'] else '不符合'}标准 """ print(report) ``` 输出结果: ``` ===== 质量检测报告 ===== 项目 | 数值| 状态 ----------------------------------- 直径 | 45.68mm|✓ 长度 | 120.5cm|✓ 公差 | ±0.250mm| =================================== 结论: 符合标准 ``` ### 关键注意事项 1. **引号嵌套**:字典键需用单引号 `data['key']`,避免双引号冲突[^3] 2. **表达式限制**:f-string 中不能包含反斜杠 `\`,需用变量替代 3. **多行表达式**:使用括号实现跨行表达式: ```python result = f""" 计算结果: { complex_calculation(x) + adjustment_factor - correction } """ ``` 4. **版本兼容**:f-string 仅支持 Python 3.6+[^1][^3] > **最佳实践**:对于复杂报告模板,建议使用 `jinja2` 等模板引擎;简单多行格式化优先选择 f-string[^2][^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thefg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值