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)

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

相关推荐
weixin_417396831 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
某不知名網友2 小时前
ROS2进阶:服务通信、自定义SRV接口、参数服务器与基于服务的参数通信详解
java·开发语言·microsoft
java_nnnn2 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
qetfw2 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
小羊没烦恼!2 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
学Linux的语莫3 小时前
python中类的常见写法
开发语言·python·状态模式
需要8263 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
dyxal3 小时前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi
譕痕3 小时前
Rabbit 实例
java·开发语言·java-rabbitmq
综合简报3 小时前
黑五海外发稿投给谁?三类海外媒体发稿渠道的分工
开发语言·php·媒体