🐍 前端开发 0 基础学 Python 入门指南:f-strings 篇

🐍 前端开发 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}岁"

核心特点:

  • 字符串前加 fF 前缀
  • 使用 {} 包裹变量或表达式
  • 简洁、直观、高性能

🆚 二、Python vs JavaScript:字符串格式化对比

2.1 基本语法对比

特性 JavaScript Python f-strings
前缀 反引号 ````` fF
占位符 ${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           (带前缀)

📚 八、总结

核心要点

  1. f-strings 是最推荐的字符串格式化方式:简洁、快速、强大
  2. 语法简单 :字符串前加 f,变量用 {} 包裹
  3. 类似 JS 模板字符串:前端开发者上手容易
  4. 支持表达式{} 内可以写任何 Python 表达式
  5. 格式化功能强大:数字、日期、对齐、填充等
  6. 调试利器 :使用 {变量=} 快速调试

与 JavaScript 的异同

特性 JavaScript Python f-strings
引号 必须用反引号 ````` 单引号或双引号都可以
前缀 fF
占位符 ${...} {...}
格式化 需要手动调用方法 内置丰富的格式化语法
性能 更快

最佳实践

  • 优先使用 f-strings(Python 3.6+)
  • ✅ 使用 {变量=} 进行调试
  • ✅ 数字格式化使用 :.2f:, 等格式符
  • ✅ 多行字符串使用三引号 f""" """
  • ❌ 避免使用老式 % 格式化

本文适合前端开发者快速掌握 Python f-strings,通过对比 JavaScript 模板字符串来理解 Python 的字符串格式化机制。

相关推荐
清空mega6 小时前
从零开始搭建 flask 博客(1)实验
后端·python·flask
一道雷6 小时前
🚀 Vue Router 插件系统:让路由扩展变得简单优雅
前端·javascript·vue.js
辣辣y6 小时前
Tailwind CSS 使用指南
前端·css
wgb04096 小时前
vxe table 升级之后页面数据不显示解决方法
java·前端·javascript
集成显卡6 小时前
Bun.js + Elysia 框架实现基于 SQLITE3 的简单 CURD 后端服务
开发语言·javascript·sqlite·bun.js
maotou5266 小时前
dvadmin开发文档(第一版)
python·django
不去幼儿园7 小时前
【启发式算法】狼群算法(Wolf Pack Algorithm, WPA)算法详细介绍(Python)
python·算法·启发式算法·任务分配·集群智能
不如摸鱼去7 小时前
从 Wot UI 出发谈 VSCode 插件的自动化发布
前端·vscode·开源·自动化