内容摘自python官方文档
2.1.1. 逻辑行
NEWLINE 形符表示结束逻辑行。语句不能超出逻辑行的边界,除非句法支持 NEWLINE (例如,复合语句中的多行子语句)。根据显式或隐式 行拼接 规则,一个或多个 物理行 可组成逻辑行。
2.1.2. 物理行
物理行是一序列字符,由行尾序列终止。源文件和字符串可使用任意标准平台行终止序列 - Unix ASCII 字符 LF (换行)、 Windows ASCII 字符序列 CR LF (回车换行)、或老式 Macintosh ASCII 字符 CR (回车)。不管在哪个平台,这些形式均可等价使用。输入结束也可以用作最终物理行的隐式终止符。
嵌入 Python 时,传入 Python API 的源码字符串应使用 C 标准惯例换行符(\n,代表 ASCII 字符 LF, 行终止符)。
每个物理行结尾的回车转换为\n
a="""
这是第二行
这是第三行"""
a #>>'\n这是第二行\n这是第三行'
2.1.5. 显式拼接行
两个及两个以上的物理行可用反斜杠(\)拼接为一个逻辑行,规则如下:以不在字符串或注释内的反斜杠结尾时,物理行将与下一行拼接成一个逻辑行,并删除反斜杠及其后的换行符。例如:
if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date
return 1
# 删除反斜杠及其后的换行符
a="""\
这是第二行\
这是第三行"""
a #>>'这是第二行这是第三行'
以反斜杠结尾的行,不能加注释;反斜杠也不能拼接注释。除字符串字面值外,反斜杠不能拼接形符(如,除字符串字面值外,不能用反斜杠把形符切分至两个物理行)。反斜杠只能在代码的字符串字面值里,在其他任何位置都是非法的。
2.1.6. 隐式拼接行
圆括号、方括号、花括号内的表达式可以分成多个物理行,不必使用反斜杠。例如:
month_names = ['Januari', 'Februari', 'Maart', # These are the
'April', 'Mei', 'Juni', # Dutch names
'Juli', 'Augustus', 'September', # for the months
'Oktober', 'November', 'December'] # of the year
隐式行拼接可含注释;后续行的缩进并不重要;还支持空的后续行。隐式拼接行之间没有 NEWLINE 形符。三引号字符串支持隐式拼接行(见下文),但不支持注释。
2.1.8. 缩进
逻辑行开头的空白符(空格符和制表符)用于计算该行的缩进层级,决定语句组块。
拼接的物理行缩进不影响其逻辑行的缩进层级
a=11
if a > 10 or \
a < 15:
print(a)
原始字符串注意点:
即使在原始字面值中,引号也可以用反斜杠转义,但反斜杠会保留在输出结果里;尤其是,原始字面值不能以单个反斜杠结尾 (反斜杠会转义其后的引号)。
#例如 r"\"" 是由两个字符组成的有效字符串字面值:反斜杠和双引号;
#r"\" 则不是有效字符串字面值(原始字符串也不能以奇数个反斜杠结尾)。
print(r""") #>>报错
print(r"\"") #>>\" 这里的\仍可以转义"但反斜杠会保留在输出结果中即算两个字符
print(r"\") #>>报错 不能使用单个\结尾(反斜杠会转义其后的引号)
还要注意,反斜杠加换行在字面值中被解释为两个字符,而不是拼接行。
a=(r"\
这是第二行")
a #>>'\\\n这是第二行'
2.4.2. 字符串字面值合并
以空白符分隔的多个相邻字符串或字节串字面值,可用不同引号标注,等同于合并操作。因此,“hello” ‘world’ 等价于 “helloworld”。此功能不需要反斜杠,即可将长字符串分为多个物理行,还可以为不同部分的字符串添加注释,例如:
re.compile("[A-Za-z_]" # letter or underscore
"[A-Za-z0-9_]*" # letter, digit or underscore
)
# 字符串合并只需要加个括号即可
a=("第一行"
"第二行"
)
a #>>'第一行第二行'
注意,此功能在句法层面定义,在编译时实现。在运行时,合并字符串表达式必须使用 ‘+’ 运算符。还要注意,字面值合并可以为每个部分应用不同的引号风格(甚至混用原始字符串和三引号字符串),格式字符串字面值也可以与纯字符串字面值合并。