print(f“{s!r}“)解释

目录

    • [1️⃣ 第一行](#1️⃣ 第一行)
    • [2️⃣ 第二行:f-string](#2️⃣ 第二行:f-string)
    • [3️⃣ `!r` 的作用](#3️⃣ !r 的作用)
    • [4️⃣ `repr()` 和 `str()` 的区别](#4️⃣ repr()str() 的区别)
    • [5️⃣ 你的代码输出](#5️⃣ 你的代码输出)
    • [6️⃣ f-string 中的三个常见转换](#6️⃣ f-string 中的三个常见转换)
    • [7️⃣ 常见使用场景(调试)](#7️⃣ 常见使用场景(调试))

这段 Python 代码主要演示 f-string 中的 !r 转换标志 的作用。我们逐步解释:

python 复制代码
s = "hello world!\n"
print(f"{s!r}")

1️⃣ 第一行

python 复制代码
s = "hello world!\n"

字符串 s 的内容是:

复制代码
hello world!

但结尾有一个 换行符 \n

实际字符串内容是:

复制代码
hello world!\n

其中 \n 表示换行。


2️⃣ 第二行:f-string

python 复制代码
print(f"{s!r}")

这里使用了 f-string(格式化字符串)

基本格式:

python 复制代码
f"{expression}"

可以在 {} 中放变量或表达式。


3️⃣ !r 的作用

!r 表示:

复制代码
对表达式调用 repr()

也就是:

python 复制代码
repr(s)

所以:

python 复制代码
f"{s!r}"

等价于:

python 复制代码
repr(s)

4️⃣ repr()str() 的区别

Python 有两种字符串表示方式:

函数 用途
str() 给用户看的
repr() 给开发者看的(更精确)

例子:

python 复制代码
s = "hello world!\n"

print(s)

输出:

复制代码
hello world!

因为 \n 变成了真实换行。


如果:

python 复制代码
print(repr(s))

输出:

复制代码
'hello world!\n'

注意:

  • 引号
  • \n 被显示出来

5️⃣ 你的代码输出

python 复制代码
s = "hello world!\n"
print(f"{s!r}")

输出:

复制代码
'hello world!\n'

原因:

复制代码
f"{s!r}" → repr(s)

6️⃣ f-string 中的三个常见转换

Python f-string 有三个常用转换:

写法 等价
{x} str(x)
{x!s} str(x)
{x!r} repr(x)
{x!a} ascii(x)

例子:

python 复制代码
s = "hello\n"

print(f"{s}")   # hello (换行)
print(f"{s!s}") # hello (换行)
print(f"{s!r}") # 'hello\n'

7️⃣ 常见使用场景(调试)

!r 非常适合调试

python 复制代码
name = "Tom\n"

print(f"name = {name!r}")

输出:

复制代码
name = 'Tom\n'

可以看到隐藏字符。


一句话总结

python 复制代码
{s!r}

等价于

python 复制代码
repr(s)

作用是 打印变量的"原始表示",包括引号和转义字符

相关推荐
李少兄19 分钟前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh44 分钟前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei1 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界2 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
繁星蓝雨2 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J3 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥3 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk5553 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python
yurenpai(27届找实习中)3 小时前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
shmily麻瓜小菜鸡4 小时前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript