连锁酒店免安装绿色中文版
746M · 2025-11-05
f-strings(格式化字符串字面值)是 Python 3.6+ 引入的最现代、最推荐的字符串格式化方式,类似 JavaScript 的模板字符串(Template Literals)。
# 基本用法:在字符串前加 f 或 F
name = "小明"
age = 20
# f-string
message = f"我叫{name},今年{age}岁"
print(message) # 输出: 我叫小明,今年20岁
# 也可以用大写 F
message = F"我叫{name},今年{age}岁"
核心特点:
f 或 F 前缀{} 包裹变量或表达式| 特性 | JavaScript | Python f-strings |
|---|---|---|
| 前缀 | 反引号 ` | f 或 F |
| 占位符 | ${expression} | {expression} |
| 引号 | 必须用反引号 | 单引号或双引号都可以 |
| 表达式 | 支持任意 JS 表达式 | 支持任意 Python 表达式 |
| 多行 | 支持 | 支持 |
// JavaScript - 模板字符串
const name = '小明'
const age = 20
const message = `我叫${name},今年${age}岁`
console.log(message)
# Python - f-strings
name = "小明"
age = 20
message = f"我叫{name},今年{age}岁"
print(message)
// 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
x = 10
y = 20
print(f"{x} + {y} = {x + y}")
# 输出: 10 + 20 = 30
price = 99.99
print(f"价格:¥{price:.2f}")
f-strings 的 {} 内可以放任何 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,结果:及格
f-strings 支持强大的数字格式化功能:
# 浮点数精度控制
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)
# 左对齐、右对齐、居中
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**|
name = "小明"
age = 20
city = "北京"
# 多行 f-string
info = f"""
姓名:{name}
年龄:{age}岁
城市:{city}
状态:{'学生' if age < 22 else '社会人'}
"""
print(info)
如果需要在输出中显示花括号,使用双花括号:
value = 42
print(f"{{value}} = {value}") # 输出: {value} = 42
# JSON 格式
name = "张三"
age = 25
print(f'{{"name": "{name}", "age": {age}}}')
# 输出: {"name": "张三", "age": 25}
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日
超级实用的调试功能,自动显示变量名和值:
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
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}岁")
| 特性 | % 格式化 | str.format() | f-strings |
|---|---|---|---|
| 可读性 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 简洁性 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 性能 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 支持表达式 | |||
| Python 版本 | 所有版本 | 2.7+ | 3.6+ |
f-strings 的优势:
# 学生成绩表
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}")
输出:
姓名 数学 英语 总分
--------------------------------
张三 95 88 183
李四 87 92 179
王五 78 85 163
# 模拟下载进度
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() # 换行
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}
""")
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", "数据库连接失败")
输出:
[2025-10-31 14:30:45] [ INFO ] 应用启动成功
[2025-10-31 14:30:46] [WARNING] 内存使用率达到 80%
[2025-10-31 14:30:47] [ ERROR ] 数据库连接失败
创建一个个人名片生成器:
# 个人名片生成器
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}")
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 (科学计数法)
text = "Python"
f"{text:<10}" # Python (左对齐)
f"{text:>10}" # Python (右对齐)
f"{text:^10}" # Python (居中)
f"{text:*<10}" # Python**** (用*填充)
f"{text:=>10}" # ====Python (用=填充)
num = 255
f"{num:b}" # 11111111 (二进制)
f"{num:o}" # 377 (八进制)
f"{num:x}" # ff (十六进制小写)
f"{num:X}" # FF (十六进制大写)
f"{num:#x}" # 0xff (带前缀)
f,变量用 {} 包裹{} 内可以写任何 Python 表达式{变量=} 快速调试| 特性 | JavaScript | Python f-strings |
|---|---|---|
| 引号 | 必须用反引号 ` | 单引号或双引号都可以 |
| 前缀 | 无 | f 或 F |
| 占位符 | ${...} | {...} |
| 格式化 | 需要手动调用方法 | 内置丰富的格式化语法 |
| 性能 | 快 | 更快 |
{变量=} 进行调试:.2f、:, 等格式符f""" """% 格式化本文适合前端开发者快速掌握 Python f-strings,通过对比 JavaScript 模板字符串来理解 Python 的字符串格式化机制。