python每天一个小技巧——Day 7:f-string 格式化技巧

  • 时间:2025-11-17 23:26 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:天我们学习 Day 7:f-string 格式化技巧。这是 Python 3.6+ 中最现代、最强劲的字符串格式化方法。 深度解析:f-string 格式化1. 基础用法f-string 是在字符串前加 f 或 F,在字符串中直接嵌入表达式:name = "Alice" age = 25 # 传统方法 message1 = "姓名: " + name + ", 年龄: " + str(age)

天我们学习 Day 7:f-string 格式化技巧。这是 Python 3.6+ 中最现代、最强劲的字符串格式化方法。


深度解析:f-string 格式化

1. 基础用法

f-string 是在字符串前加 f 或 F,在字符串中直接嵌入表达式:

name = "Alice"
age = 25

# 传统方法
message1 = "姓名: " + name + ", 年龄: " + str(age)
message2 = "姓名: {}, 年龄: {}".format(name, age)

# f-string (推荐)
message = f"姓名: {name}, 年龄: {age}"
print(message)  # 输出: 姓名: Alice, 年龄: 25

2. 表达式求值

f-string 中可以执行任何有效的 Python 表达式:

a, b = 5, 3
print(f"{a} + {b} = {a + b}")          # 输出: 5 + 3 = 8
print(f"{a} * {b} = {a * b}")          # 输出: 5 * 3 = 15
print(f"{a}的平方是 {a**2}")           # 输出: 5的平方是 25

# 调用函数和方法
name = "alice"
print(f"大写: {name.upper()}")         # 输出: 大写: ALICE
print(f"长度: {len(name)}")            # 输出: 长度: 5

3. 格式化选项

数字格式化:

pi = 3.1415926535
number = 1234.5678

print(f"Pi: {pi:.2f}")                 # 输出: Pi: 3.14
print(f"数字: {number:,.2f}")          # 输出: 数字: 1,234.57
print(f"百分比: {0.256:.1%}")          # 输出: 百分比: 25.6%
print(f"十六进制: {255:#x}")           # 输出: 十六进制: 0xff

对齐和填充:

text = "Python"
number = 42

print(f"左对齐: |{text:<10}|")         # 输出: 左对齐: |Python    |
print(f"右对齐: |{text:>10}|")         # 输出: 右对齐: |    Python|
print(f"居中对齐: |{text:^10}|")       # 输出: 居中对齐: |  Python  |
print(f"填充0: {number:05d}")          # 输出: 填充0: 00042

4. 调试功能(Python 3.8+)

使用 = 操作符可以同时显示表达式和其值:

name = "Alice"
age = 25
score = 95.5

print(f"{name=}")                      # 输出: name='Alice'
print(f"{age=}")                       # 输出: age=25
print(f"{score=:.1f}")                 # 输出: score=95.5
print(f"{len(name)=}")                 # 输出: len(name)=5

# 复杂表达式调试
x, y = 3, 4
print(f"{x + y=}")                     # 输出: x + y=7

5. 多行 f-string

name = "Alice"
age = 25
city = "New York"

# 多行f-string
profile = f"""
个人信息:
---------
姓名: {name}
年龄: {age}
城市: {city}
得分: {age * 4:.1f}
"""
print(profile)

6. 嵌套 f-string

width = 10
precision = 2
value = 12.34567

# 嵌套格式化
print(f"结果: {value:{width}.{precision}f}")  # 输出: 结果:      12.35

# 更复杂的嵌套
format_spec = ">10.2f"
print(f"值: {value:{format_spec}}")          # 输出: 值:      12.35

7. 日期和时间格式化

from datetime import datetime

now = datetime.now()

print(f"当前时间: {now:%Y-%m-%d %H:%M:%S}")    # 输出: 当前时间: 2023-12-07 14:30:25
print(f"今天日期: {now:%Y年%m月%d日}")         # 输出: 今天日期: 2023年12月07日
print(f"星期: {now:%A}")                      # 输出: 星期: Thursday

8. 字典和对象访问

# 字典访问
person = {"name": "Bob", "age": 30, "city": "London"}
print(f"姓名: {person['name']}, 年龄: {person['age']}")

# 对象属性访问
class User:
    def __init__(self, name, level):
        self.name = name
        self.level = level

user = User("Charlie", "VIP")
print(f"用户: {user.name}, 等级: {user.level}")

9. 高级技巧

技巧1:条件表达式

score = 85
result = f"成绩: {score} - {'及格' if score >= 60 else '不及格'}"
print(result)  # 输出: 成绩: 85 - 及格

# 复杂的条件格式化
temperature = 22
status = f"温度: {temperature}°C - {'炎热' if temperature > 30 else '舒服' if temperature > 15 else '寒冷'}"
print(status)  # 输出: 温度: 22°C - 舒服

技巧2:循环和生成器表达式

numbers = [1, 2, 3, 4, 5]
print(f"平方数: {[x**2 for x in numbers]}")  # 输出: 平方数: [1, 4, 9, 16, 25]

# 连接字符串
names = ["Alice", "Bob", "Charlie"]
print(f"所有名字: {', '.join(names)}")       # 输出: 所有名字: Alice, Bob, Charlie

技巧3:转义大括号

# 显示字面量的大括号
value = 42
print(f"值: {{{value}}}")  # 输出: 值: {42}
print(f"{{这是大括号}}")   # 输出: {这是大括号}

10. 实际项目案例

案例1:报表生成

def generate_report(data):
    """生成数据报表"""
    total = sum(data)
    average = total / len(data)
    maximum = max(data)
    minimum = min(data)
    
    return f"""
数据报表
========
数据点: {len(data)}
总和: {total:,.2f}
平均值: {average:.2f}
最大值: {maximum}
最小值: {minimum}
范围: {maximum - minimum}
"""

案例2:配置信息显示

def show_config(config):
    """显示配置信息"""
    return f"""
系统配置
=======
{'设置':<15} {'值':<20} {'状态':<10}
{'-' * 50}
{'主机':<15} {config.get('host', 'N/A'):<20} {'✅' if config.get('host') else '❌'}
{'端口':<15} {config.get('port', 'N/A'):<20} {'✅' if config.get('port') else '❌'}
{'调试模式':<15} {config.get('debug', False):<20} {'✅' if config.get('debug') else '❌'}
"""

今日练习

练习1:基础格式化

name = "张三"
age = 28
salary = 15000.50
# 生成字符串: "张三(28岁)的月薪是¥15,000.50"
# 你的代码 here

练习2:调试输出

items = ["apple", "banana", "cherry"]
count = len(items)
total_length = sum(len(item) for item in items)
# 使用调试格式输出变量信息
# 你的代码 here

练习3:实战应用

def format_product_info(products):
    """
    格式化商品信息表格
    列: 名称(左对齐10) | 价格(右对齐8, 2位小数) | 库存(居中6)
    """
    # 你的代码 here
    pass

# 测试数据
products = [
    {"name": "Apple", "price": 5.99, "stock": 120},
    {"name": "Banana", "price": 3.50, "stock": 80},
    {"name": "Orange", "price": 4.25, "stock": 65}
]

练习答案:

# 练习1答案:
result = f"{name}({age}岁)的月薪是¥{salary:,.2f}"

# 练习2答案:
print(f"{items=}")
print(f"{count=}")
print(f"{total_length=}")

# 练习3答案:
def format_product_info(products):
    header = f"{'名称':<10} | {'价格':>8} | {'库存':^6}"
    separator = "-" * 30
    rows = []
    for product in products:
        row = f"{product['name']:<10} | {product['price']:>8.2f} | {product['stock']:^6}"
        rows.append(row)
    return "
".join([header, separator] + rows)

今日总结

  • 基本语法: f"文本{表达式}文本"
  • 格式化选项: {value:格式说明符}
  • 调试功能: {variable=} (Python 3.8+)
  • 多行支持: 使用三引号的多行 f-string
  • 嵌套格式化: 动态指定格式说明符

优点:

  • 更简洁易读
  • 执行速度更快
  • 支持复杂表达式
  • 强劲的格式化功能

记住:在 Python 3.6+ 中,f-string 应该是字符串格式化的首选方法!

明天我们将学习 collections 模块中的实用工具,如 defaultdict, Counter, namedtuple 等。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】每日GitHub精选:Docker 的无声竞争者——Podman 全面解析(2025-11-18 00:04)
【系统环境|】Linux(CentOs7)防火墙命令,两种使用方式示例(2025-11-18 00:03)
【系统环境|】探究 CentOS 7 下 iptables 和 firewalld 切换过程中,谁主沉浮(2025-11-18 00:03)
【系统环境|】Oracle 表分区在线重定义(2025-11-18 00:02)
【系统环境|】Oracle 删除大量表记录操作总结(2025-11-18 00:02)
【系统环境|】2022年学C++开发好比49年入国军,真的没什么公司在用C++了吗?(2025-11-18 00:01)
【系统环境|】核医学专业名词索引(X-Z)(2025-11-18 00:01)
【系统环境|】大手牵小手,我们一起去看世界~~~~普吉7天6晚亲子游(2025-11-18 00:00)
【系统环境|】显微镜下的质量控制(2025-11-18 00:00)
【系统环境|】Python代码如何变成双击就能运行的程序(2025-11-17 23:59)
手机二维码手机访问领取大礼包
返回顶部