字符串文字和字符串值之间有什么区别?

What is the difference between string literals and string values?

看到这个

I think your confusion is that you're mixing up the concept of string literals in source code with actual string values.

字符串文字和字符串值有什么区别?我没看懂。

字符串文字是您可以在程序源代码中编写的一段文本,以引号开头和结尾,告诉 Python 创建具有特定内容的字符串。看起来像

'asdf'

'''
multiline
content
'''

'the thing at the end of this one is a line break\n'

在字符串文字(原始字符串文字除外)中,字符串文字中称为 转义序列 的特殊字符序列将替换为实际字符串中的不同字符。例如,字符串文字中的转义序列 \n 被替换为实际字符串中的换行符。转义序列以反斜杠开头。


字符串是 Python 表示文本值的对象。它可以从字符串文字构建,也可以从文件中读取,也可以来自许多其他来源。

字符串中的反斜杠没有特殊含义,大多数可能的字符串来源中的反斜杠也没有特殊含义。例如,如果您有一个包含反斜杠的文件,如下所示:

asdf\n

你也是

with open('that_file.txt') as f:
    text = f.read()

文件中的\n不会换行。反斜杠在字符串文字中是特殊的,但在大多数其他上下文中不是。


当您通过调用 repr 或交互式显示字符串来请求字符串的 repr 表示形式时:

>>> some_string = "asdf"
>>> some_string
'asdf'

Python 将构建一个新字符串,其内容是将计算为原始字符串的字符串文字。在此示例中,some_string 中没有 '" 字符。字符串的内容是asdf四个字符,print字符串显示的字符:

>>> print(some_string)
asdf

但是,repr 表示中有 ' 个字符,因为 'asdf' 是一个字符串文字,其计算结果为字符串。请注意,'asdf' 与我们最初使用的 "asdf" 不是同一个字符串文字 - 许多不同的字符串文字可以评估为相等的字符串。