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)

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

相关推荐
知识分享小能手8 分钟前
C++ 学习教程,从入门到精通,C++类继承 — 完整知识点详解(13)
开发语言·c++·学习
弹简特12 分钟前
【Java项目-企悦抽】15-活动管理模块02-活动创建测试与活动列表实现
java·开发语言·springboot
keyipatience1 小时前
跳表详细解析
开发语言·数据结构·c++·算法·跳表
喆星时瑜1 小时前
R语言基础语法入门
开发语言·r语言
想吃火锅10051 小时前
【leetcode】189.轮转数组js
开发语言·javascript·leetcode
郝学胜-神的一滴1 小时前
AI 编程智能体 02:AI智能体到底是什么
开发语言·人工智能·python·程序人生·pycharm
念何架构之路1 小时前
go-grpc服务端调用
开发语言·后端·golang
小小、码农1 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
弹简特1 小时前
【Java项目-企悦抽】13-奖品管理模块-奖品列表和创建奖品的实现
java·开发语言·网络·springboot
Rosanci1 小时前
从零到合入主线:我的 DeepSeek Harness 开源贡献实战手记
开发语言·前端·开源