Python编程必备技巧:python怎么输入多行字符串的多种方法与实践

说起来,刚开始学写代码那会儿,最让我这种急性子抓狂的是啥?不是逻辑绕不明白,也不是哪个库咋用,反而是那些看着不起眼的、特别基础的小地方。比如,想在屏幕上打一段稍微长点儿的文字,或者给函数写个说明,结果呢?一行写下去,眼瞅着编辑器边框越来越近,得,换行!可Python里,普通的单引号或双引号字符串,一行就是一行啊,硬要换行直接报错给咱看。那时候真是犯愁,难道一段文字就得用好几个print()函数,或者更蠢,用加号(+)把一堆短字符串连起来,中间还得小心翼翼地加上个'\n'表示换行?天哪,想想那个画面,一堆引号、加号、反斜杠混在一起,眼睛都要看花了,更别提改起来多费劲了。那感觉,就像想痛痛快快说段话,结果每说几句就得停下来清清嗓子,还得比划一下“这里换行啊”。太憋屈了!

幸好,这门语言的设计者早就想到了我们这些凡夫俗子的痛点。他们给了我们一个特别好用的“大杀器”,专门用来处理这种多行字符串的需求。这玩意儿就是三引号。对,你没听错,三引号!可以是三个单引号(''')连在一起,也可以是三个双引号(""")连在一起。用这玩意儿把你想写的长篇大论、或者需要保留格式的文本一裹,嘿!奇迹就发生了。

比如,你想写段小诗,或者一段产品介绍:

```python

以前?可能会这样,想想就头大

# info = '这是第一行产品介绍。\n' + \
# '这是第二行关键特性。\n' + \

'这是第三行联系方式。'

现在,有了三引号,世界清静了!

product_info = """
这是第一行产品介绍。
这是第二行关键特性。
这是第三行联系方式。
请访问我们的网站获取更多信息。
"""
print(product_info)
```

你看,是不是瞬间感觉代码都清爽了,读起来跟咱们平时写字一样自然?你在三引号里面怎么排版,它基本上就给你原样保留了格式,包括换行符。编辑器里的换行,到了字符串里就自动变成了\n。这不就是咱们梦寐以求的“所见即所得”吗?写起来多舒服!尤其是当你要处理一大段文本的时候,比如嵌入一段HTML代码、一段SQL查询语句,或者写配置文件模板,三引号简直就是个福音,是个神器

再举个例子,很多时候我们需要在代码里写文档,解释函数是干嘛的,参数是什么,返回什么。这叫Docstring,文档字符串。Python社区有个约定俗成的习惯,用三引号来写Docstring,而且通常是三个双引号"""

```python
def calculate_area(radius):
"""
计算圆的面积。

参数:
    radius (float): 圆的半径。

返回:
    float: 圆的面积。
          如果半径为负,则返回None。
"""
if radius < 0:
    return None
return 3.14159 * radius * radius

你甚至可以通过 help() 函数或者 doc 属性看到这个文档

help(calculate_area)

print(calculate_area.doc)

```

看到了吗?Docstring 不仅仅是给人看的注释,它更是代码的一部分,可以通过工具自动提取生成文档。而用三引号来写,可以让文档的格式、层次分明,写起来也方便。试想一下,如果用单引号或者双引号写这么长一段文档,中间的换行、缩进(虽然Docstring的缩进有点讲究,一般顶格写,但内容里的换行是保留的),得加多少\n啊!想想就觉得累得慌。

那么问题来了,是该用三个单引号'''还是三个双引号"""呢?就像是吃饺子蘸醋还是蘸酱油一样,这事儿其实没啥对错,主要是习惯问题,或者说是代码风格问题。大多数Python代码里,写普通的多行文本字符串,比如打印帮助信息、存储一个消息模板什么的,用'''"""都可以。但如前面说的,写Docstring的时候,社区普遍推荐使用三个双引号"""。为啥?大概是因为Docstring经常需要包含描述函数功能的自然语言,这些自然语言里可能会出现单引号,比如“Let's go!”。如果在三个单引号字符串里写'Let's go!',那里面的单引号就得转义成\',挺麻烦的。用双引号就不存在这个问题了。反过来,如果字符串里需要包含双引号,那用三个单引号就更方便。所以,灵活运用,但遵循社区规范(尤其是Docstring用""")总是没错的。

当然,你可能好奇,有没有别的输入多行字符串的方法?其实从技术上讲,前面提到的用'\n'手动插入换行符,然后用+或者直接把相邻的字符串字面量写在一起(Python会自动拼接相邻的字符串字面量,这个很多人可能忽略了!比如 'hello ' 'world' 结果就是 'hello world')也能实现多行效果,但那种方式写长文本真是太太太太别扭了,可读性极差,维护起来更是灾难。相比之下,三引号简直是优雅到不行。

有个小细节得提一下,用三引号创建多行字符串时,字符串内容会保留原始格式,包括你写在开头和结尾的换行以及每一行的缩进。有时候这正是你想要的,比如上面Docstring的例子,保留缩进让文本看起来更有结构。但有时候,你可能只是想输入一段长文本,并不想保留开头或结尾因为书写方便而产生的空白行或缩进。

```python

这样的写法

messy_string = """
这行前面有缩进
这行没有
这行又有缩进

这行后面还有空行和缩进

"""
print(repr(messy_string)) # repr() 可以更清楚地显示字符串的原始形式,包括换行符和空格
```

运行上面这段代码,你会发现messy_string变量里包含了三引号后面那个换行符,以及每一行开头的空格缩进,还有最后那个空行和三引号前面那行的缩进。如果这不是你想要的,你可能需要手动处理一下字符串,比如使用strip()方法去掉开头和结尾的空白,或者自己控制书写格式。一个常见的做法是,三引号的开始和结束符分别单独占一行,并且内容顶格写(如果想要内容不缩进),这样可以避免首尾多余的空白行和字符串内容的意外缩进:

python
cleaner_string = """\
这行前面没有空白
这行也没有空白
这行还是没有空白\
"""
print(repr(cleaner_string))

注意看,我在开始的"""后面加了个反斜杠\,结束的"""前面也加了个\。这个反斜杠的作用是忽略紧随其后的换行符。这样,"""\ 后面的那个换行就不会被包含到字符串里了。结尾的 \\n"""同理,会忽略` 前面的那个换行符。不过说实话,后面这个 \ 我自己都很少用,通常就是写成:

```python
simpler_clean_string = """
这行前面有个换行符,但通常可以通过代码逻辑处理掉
这行没有意外缩进
"""

或者更直接,开始三引号紧跟着内容

inline_start_string = """这行就是第一行
这行是第二行"""
```

看具体需求了。但核心思想不变:三引号是处理多行字符串主要最便捷的方式。

哦对了,还有个跟字符串相关但有时会和多行字符串一起出现的概念,叫原始字符串(Raw String),用r前缀表示。比如r"C:\Users\Name\Documents"。原始字符串会忽略反斜杠的转义功能。如果你在多行字符串里写路径或者正则表达式,里面有很多反斜杠,结合r前缀会非常方便:

```python

一个包含反斜杠的多行字符串

# 如果不用 r 前缀,得写成 \ 来表示一个 \
path_info = r"""
这是我的文件路径:
C:\Users\Username\Documents\MyProject\data.txt
正则表达式示例:
\w+\s+\d+
"""
print(path_info)
```

看到了吗?在r"""..."""里面,反斜杠就是它本身,不会被解释成换行符(\n)或者制表符(\t)之类的特殊字符。这在处理某些特定文本格式时特别有用,让你的多行字符串写起来更直观,尤其是在粘贴一些包含大量反斜杠的文本时。

总而言之,在Python里需要输入多行字符串的时候,首先、也是最推荐想到的,就是三引号'''""")。它极大地提高了编写和阅读长文本的效率和可读性。掌握它,你的Python代码会漂亮很多,写起来也会顺畅很多,告别那些看着就头大的反斜杠和加号拼接吧!无论是写Docstring、定义长消息、嵌入其他语言代码片段,还是处理文件模板,三引号都是你强有力的助手。时不时地回顾一下这些基础但实用的技巧,总能让你的编程之路少一些磕绊,多一些顺畅。毕竟,代码是写给人看的,好的代码首先得是容易理解和维护的,而清晰的字符串表示是重要一环。所以,别再为区区换行烦恼了,拥抱三引号吧!

阅读剩余
THE END