🐍 前端开发 0 基础学 Python 入门指南:f-strings 篇
从 JavaScript 模板字符串到 Python f-strings,让字符串格式化变得更优雅!
📝 一、什么是 f-strings?
f-strings(格式化字符串字面值)是 Python 3.6+ 引入的最现代、最推荐的字符串格式化方式,类似 JavaScript 的模板字符串(Template Literals)。
1.1 基本语法
            
            
              python
              
              
            
          
          # 基本用法:在字符串前加 f 或 F
name = "小明"
age = 20
# f-string
message = f"我叫{name},今年{age}岁"
print(message)  # 输出: 我叫小明,今年20岁
# 也可以用大写 F
message = F"我叫{name},今年{age}岁"核心特点:
- 字符串前加 f或F前缀
- 使用 {}包裹变量或表达式
- 简洁、直观、高性能
🆚 二、Python vs JavaScript:字符串格式化对比
2.1 基本语法对比
| 特性 | JavaScript | Python f-strings | 
|---|---|---|
| 前缀 | 反引号 ````` | f或F | 
| 占位符 | ${expression} | {expression} | 
| 引号 | 必须用反引号 | 单引号或双引号都可以 | 
| 表达式 | 支持任意 JS 表达式 | 支持任意 Python 表达式 | 
| 多行 | 支持 | 支持 | 
            
            
              javascript
              
              
            
          
          // JavaScript - 模板字符串
const name = '小明'
const age = 20
const message = `我叫${name},今年${age}岁`
console.log(message)
            
            
              python
              
              
            
          
          # Python - f-strings
name = "小明"
age = 20
message = f"我叫{name},今年{age}岁"
print(message)2.2 表达式计算对比
            
            
              javascript
              
              
            
          
          // JavaScript
const x = 10
const y = 20
console.log(`${x} + ${y} = ${x + y}`)
// 输出: 10 + 20 = 30
const price = 99.99
console.log(`价格:¥${price.toFixed(2)}`)
            
            
              python
              
              
            
          
          # Python
x = 10
y = 20
print(f"{x} + {y} = {x + y}")
# 输出: 10 + 20 = 30
price = 99.99
print(f"价格:¥{price:.2f}")💡 三、f-strings 的强大功能
3.1 表达式计算
f-strings 的 {} 内可以放任何 Python 表达式:
            
            
              python
              
              
            
          
          # 算术运算
a = 10
b = 5
print(f"{a} + {b} = {a + b}")        # 10 + 5 = 15
print(f"{a} * {b} = {a * b}")        # 10 * 5 = 50
# 调用函数
name = "python"
print(f"大写:{name.upper()}")        # 大写:PYTHON
print(f"首字母大写:{name.capitalize()}")  # 首字母大写:Python
# 列表/字典操作
fruits = ["苹果", "香蕉", "橙子"]
print(f"第一个水果:{fruits[0]}")     # 第一个水果:苹果
user = {"name": "张三", "age": 25}
print(f"姓名:{user['name']}")       # 姓名:张三
# 条件表达式
score = 85
print(f"成绩:{score},结果:{'及格' if score >= 60 else '不及格'}")
# 输出: 成绩:85,结果:及格3.2 数字格式化
f-strings 支持强大的数字格式化功能:
            
            
              python
              
              
            
          
          # 浮点数精度控制
pi = 3.141592653589793
print(f"{pi:.2f}")      # 3.14  (保留2位小数)
print(f"{pi:.4f}")      # 3.1416 (保留4位小数)
# 百分比
rate = 0.8567
print(f"{rate:.2%}")    # 85.67%
print(f"{rate:.1%}")    # 85.7%
# 千分位分隔符
money = 1234567.89
print(f"{money:,.2f}")  # 1,234,567.89
print(f"{money:,.0f}")  # 1,234,568
# 科学计数法
big_num = 123456789
print(f"{big_num:.2e}") # 1.23e+08
# 填充和对齐
num = 42
print(f"{num:05d}")     # 00042 (填充0,总宽度5)
print(f"{num:5d}")      # "   42" (右对齐,总宽度5)
print(f"{num:<5d}")     # "42   " (左对齐,总宽度5)
print(f"{num:^5d}")     # " 42  " (居中对齐,总宽度5)3.3 字符串对齐
            
            
              python
              
              
            
          
          # 左对齐、右对齐、居中
name = "Python"
print(f"{name:<10}|")   # Python    | (左对齐,宽度10)
print(f"{name:>10}|")   #     Python| (右对齐,宽度10)
print(f"{name:^10}|")   #   Python  | (居中,宽度10)
# 自定义填充字符
print(f"{name:*<10}|")  # Python****|
print(f"{name:*>10}|")  # ****Python|
print(f"{name:*^10}|")  # **Python**|3.4 多行字符串
            
            
              python
              
              
            
          
          name = "小明"
age = 20
city = "北京"
# 多行 f-string
info = f"""
姓名:{name}
年龄:{age}岁
城市:{city}
状态:{'学生' if age < 22 else '社会人'}
"""
print(info)3.5 嵌套花括号
如果需要在输出中显示花括号,使用双花括号:
            
            
              python
              
              
            
          
          value = 42
print(f"{{value}} = {value}")  # 输出: {value} = 42
# JSON 格式
name = "张三"
age = 25
print(f'{{"name": "{name}", "age": {age}}}')
# 输出: {"name": "张三", "age": 25}3.6 日期时间格式化
            
            
              python
              
              
            
          
          from datetime import datetime
now = datetime.now()
# 日期格式化
print(f"今天是:{now:%Y-%m-%d}")              # 2025-10-31
print(f"现在是:{now:%H:%M:%S}")              # 14:30:45
print(f"完整时间:{now:%Y-%m-%d %H:%M:%S}")    # 2025-10-31 14:30:45
# 中文格式
print(f"今天是:{now:%Y年%m月%d日}")           # 2025年10月31日3.7 调试输出(Python 3.8+)
超级实用的调试功能,自动显示变量名和值:
            
            
              python
              
              
            
          
          x = 10
y = 20
name = "Python"
# 使用 = 号进行调试输出
print(f"{x=}")           # x=10
print(f"{y=}")           # y=20
print(f"{name=}")        # name='Python'
# 可以和表达式结合
print(f"{x + y=}")       # x + y=30
print(f"{len(name)=}")   # len(name)=6
# 还可以指定格式
pi = 3.141592653589793
print(f"{pi=:.2f}")      # pi=3.14🔄 四、Python 字符串格式化的演变史
4.1 三种格式化方式对比
            
            
              python
              
              
            
          
          name = "小明"
age = 20
# 1. 老式 % 格式化(不推荐)
print("我叫%s,今年%d岁" % (name, age))
# 2. str.format() 方法
print("我叫{},今年{}岁".format(name, age))
print("我叫{0},今年{1}岁".format(name, age))
print("我叫{n},今年{a}岁".format(n=name, a=age))
# 3. f-strings(最推荐!)✨
print(f"我叫{name},今年{age}岁")4.2 为什么选择 f-strings?
| 特性 | % 格式化 | str.format() | f-strings | 
|---|---|---|---|
| 可读性 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 
| 简洁性 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 
| 性能 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 
| 支持表达式 | ❌ | ✅ | ✅ | 
| Python 版本 | 所有版本 | 2.7+ | 3.6+ | 
f-strings 的优势:
- ✅ 最快:性能比其他方法快 2-3 倍
- ✅ 最简洁:代码最短,最直观
- ✅ 最强大:支持任意表达式
- ✅ 最现代:Python 官方推荐
🎨 五、实战场景
5.1 生成表格
            
            
              python
              
              
            
          
          # 学生成绩表
students = [
    {"name": "张三", "math": 95, "english": 88},
    {"name": "李四", "math": 87, "english": 92},
    {"name": "王五", "math": 78, "english": 85},
]
print(f"{'姓名':^6} {'数学':^6} {'英语':^6} {'总分':^6}")
print("-" * 32)
for s in students:
    total = s['math'] + s['english']
    print(f"{s['name']:^6} {s['math']:^6} {s['english']:^6} {total:^6}")输出:
            
            
              markdown
              
              
            
          
            姓名     数学     英语     总分  
--------------------------------
  张三      95      88      183  
  李四      87      92      179  
  王五      78      85      163  5.2 进度条
            
            
              python
              
              
            
          
          # 模拟下载进度
total = 100
for i in range(0, 101, 10):
    percent = i / total
    bar = "█" * (i // 10) + "░" * ((100 - i) // 10)
    print(f"\r下载进度:[{bar}] {percent:.0%} ({i}/{total})", end="")
    # 实际使用时这里会有 time.sleep()
print()  # 换行5.3 价格标签生成器
            
            
              python
              
              
            
          
          products = [
    {"name": "苹果", "price": 12.50, "discount": 0.8},
    {"name": "香蕉", "price": 8.00, "discount": 0.9},
    {"name": "橙子", "price": 15.99, "discount": 0.75},
]
print("=== 商品价格清单 ===")
for p in products:
    original = p['price']
    final = p['price'] * p['discount']
    saved = original - final
    
    print(f"""
    商品:{p['name']}
    原价:¥{original:.2f}
    折扣:{p['discount']:.0%}
    现价:¥{final:.2f}
    节省:¥{saved:.2f}
    """)5.4 日志格式化
            
            
              python
              
              
            
          
          from datetime import datetime
def log(level, message):
    now = datetime.now()
    print(f"[{now:%Y-%m-%d %H:%M:%S}] [{level:^7}] {message}")
log("INFO", "应用启动成功")
log("WARNING", "内存使用率达到 80%")
log("ERROR", "数据库连接失败")输出:
            
            
              css
              
              
            
          
          [2025-10-31 14:30:45] [ INFO  ] 应用启动成功
[2025-10-31 14:30:46] [WARNING] 内存使用率达到 80%
[2025-10-31 14:30:47] [ ERROR ] 数据库连接失败💡 六、实战练习
创建一个个人名片生成器:
            
            
              python
              
              
            
          
          # 个人名片生成器
print("=== 个人名片生成器 ===\n")
# 输入信息
name = input("请输入姓名:")
title = input("请输入职位:")
company = input("请输入公司:")
email = input("请输入邮箱:")
phone = input("请输入电话:")
# 生成名片
card = f"""
╔════════════════════════════════════╗
║                                    ║
║  {name:^10}                       ║
║  {title:^10}                       ║
║                                    ║
║  🏢 {company:<24} ║
║  📧 {email:<24} ║
║  📱 {phone:<24} ║
║                                    ║
╚════════════════════════════════════╝
"""
print(card)
# 也可以生成简洁版
print("\n=== 简洁版名片 ===")
print(f"{name} | {title} @ {company}")
print(f"📧 {email} | 📱 {phone}")🎯 七、常用格式化速查表
7.1 数字格式化
            
            
              python
              
              
            
          
          num = 1234.5678
f"{num:.2f}"      # 1234.57        (2位小数)
f"{num:,.2f}"     # 1,234.57       (千分位)
f"{num:>10.2f}"   #    1234.57     (右对齐,宽度10)
f"{num:<10.2f}"   # 1234.57        (左对齐,宽度10)
f"{num:^10.2f}"   #  1234.57       (居中,宽度10)
f"{num:0>10.2f}"  # 0001234.57     (用0填充)
f"{num:.2%}"      # 123456.78%     (百分比)
f"{num:.2e}"      # 1.23e+03       (科学计数法)7.2 字符串对齐
            
            
              python
              
              
            
          
          text = "Python"
f"{text:<10}"     # Python         (左对齐)
f"{text:>10}"     #     Python     (右对齐)
f"{text:^10}"     #   Python       (居中)
f"{text:*<10}"    # Python****     (用*填充)
f"{text:=>10}"    # ====Python     (用=填充)7.3 进制转换
            
            
              python
              
              
            
          
          num = 255
f"{num:b}"        # 11111111       (二进制)
f"{num:o}"        # 377            (八进制)
f"{num:x}"        # ff             (十六进制小写)
f"{num:X}"        # FF             (十六进制大写)
f"{num:#x}"       # 0xff           (带前缀)📚 八、总结
核心要点
- f-strings 是最推荐的字符串格式化方式:简洁、快速、强大
- 语法简单 :字符串前加 f,变量用{}包裹
- 类似 JS 模板字符串:前端开发者上手容易
- 支持表达式 :{}内可以写任何 Python 表达式
- 格式化功能强大:数字、日期、对齐、填充等
- 调试利器 :使用 {变量=}快速调试
与 JavaScript 的异同
| 特性 | JavaScript | Python f-strings | 
|---|---|---|
| 引号 | 必须用反引号 ````` | 单引号或双引号都可以 | 
| 前缀 | 无 | f或F | 
| 占位符 | ${...} | {...} | 
| 格式化 | 需要手动调用方法 | 内置丰富的格式化语法 | 
| 性能 | 快 | 更快 | 
最佳实践
- ✅ 优先使用 f-strings(Python 3.6+)
- ✅ 使用 {变量=}进行调试
- ✅ 数字格式化使用 :.2f、:,等格式符
- ✅ 多行字符串使用三引号 f""" """
- ❌ 避免使用老式 %格式化
本文适合前端开发者快速掌握 Python f-strings,通过对比 JavaScript 模板字符串来理解 Python 的字符串格式化机制。