我来自C语言
在Python的书中给出了
转义序列中的
\ - 多行字符串中的新行
\ n - 换行符
我很困惑,无法区分这两者。
答案 0 :(得分:3)
你完全误读了这本书。
\
不是转义序列,并且在字符串中不单独使用。它用于多行代码。
\n
是字符串中的换行符 。
答案 1 :(得分:2)
它用于将具有大量字符的字符串拆分成多行,因为它不便于在一行中写入。 这只会在代码中产生影响。
另一方面,这是一个典型的换行符语句,用于在新行中打印某些内容。我们在C和C ++语言中使用的相同。 这是在输出中产生影响的东西。
答案 2 :(得分:1)
以下是对您问题的回复:
\ n的目的基本上用于提供换行符。
示例:
打印("你好\ n&#34)
打印("您好&#34)
以上的输出如下:
您好
您好
\的目的主要用于转义具有特殊含义的字符
示例:我必须在输出中打印Hello \,然后代码就像
打印("你好\\&#34)
上述代码的输出如下:
您好\
所以基本上为了在你的输出中打印Hello \,你必须放两个" \\"这就是\字符的目的(逃避特殊字符)。
我希望这会有所帮助。
答案 3 :(得分:1)
使用“\”,您可以在编写代码时更改行。我的意思是,如果您编写了很长的代码行,并且想要更改行以查看您键入的内容。 例如:
print("This is a demonstration of backslash.")
与写作相同:
print("This is a demonstration \
of backslash")
另一方面,使用“\ n”,您可以更改要打印的内容。例如,当你写:print("this is an \nexample")
时,它会打印“这是一个”(更改行)“示例”。
答案 4 :(得分:1)
使用\ n将输出转到下一行。
print('Hello \nworld!')
您好
世界!
当您希望该字符出现在打印输出中时,请使用带有Python含义的字符的反斜杠。
print('It\'s cold outside')
外面很冷
我希望这会有所帮助。
答案 5 :(得分:1)
这本书混淆了两个截然不同的概念让你感到困惑。
\n
是字符串文字中的转义序列。与其他\single-character
和\xhh
或\uhhhh
转义序列一样,这些完全类似于those in C;它们在字符串中定义了一个字符,否则在编写代码时很难拼出来。
\
在物理代码行的末尾扩展逻辑行。也就是说,Python将在下一行看到文本作为当前行的一部分,使其成为一长串代码。这适用于Python代码中的任何地方。
当您打印使用这两种技术的字符串结果时,您可以轻松地看到差异:
escape_sequence = "This is a line.\nThis is another line"
logical_line_extended = "This is a logical line. \
This is still the same logical line."
print(escape_sequence)
print(logical_line_extended)
此输出
This is a line.
This is another line
This is a logical line. This is still the same logical line.
请注意,换行符已交换!字符串值中的\n
转义序列导致输出断开两行(终端或控制台或显示打印数据的任何内容,知道如何解释换行符),同时{{1}中的换行符1}}字符串文字定义消失了;它从来不是定义的字符串值的一部分,它只是源代码中的换行符。
Python允许你像这样扩展一行代码,因为Python定义了如何界定逻辑行的方式与C语言截然不同。在C中,您使用logical_line_extended
结束语句,使用;
结束行的组块大括号。换行符不是C读取代码的一部分。
所以,以下C代码:
{...}
与
相同if (a) { foo = 'bar'; spam = 'ham'; }
C知道每个语句的开始和结束位置,因为程序员必须使用if (a) {
foo = 'bar';
spam = 'ham';
}
和;
来分隔行和块,这里的语言根本不关心缩进或换行。但是,在Python中,您明确使用换行符和缩进来定义相同的结构。所以Python使用空格而不是{...}
,{
和}
。
这意味着您最终可以使用长行代码来保存复杂的表达式:
;
# deliberately convoluted long expression to illustrate a point
expr = 18 ** (1 / 3) / (6 * (3 + sqrt(3) * I) ** (1 / 3)) + 12 ** (1 / 3) * (3 + sqrt(3) * I) ** (1 / 3) / 12
的要点是允许您在多个逻辑行中分解这么长的表达式,方法是在最后用\
扩展当前行:
\
因此# deliberately convoluted long expression to illustrate a point
expr = 18 ** (1 / 3) / (6 * (3 + sqrt(3) * I) ** (1 / 3)) + \
12 ** (1 / 3) * (3 + sqrt(3) * I) ** (1 / 3) / 12
作为行上的最后一个字符,告诉Python忽略那里的换行符并继续将以下行视为同一逻辑行的一部分
Python在看到开头\
,(
或[
大括号时也会扩展逻辑行,直到匹配的{
,}
或{发现{1}}大括号关闭表达式。这是扩展行的首选方法。因此,上面的表达式可以在多个逻辑行中分解:
]
您可以对字符串执行相同的操作:
)
这使用Python借用的另一个C字符串文字技巧:multiple consecutive string literals form one long string object一旦解析和编译。
请参阅Lexical analysis reference documentation:
2.1.5。显式连接线
可以使用反斜杠字符(
将两条或更多条物理线连接到逻辑行中expr = (18 ** (1 / 3) / (6 * (3 + sqrt(3) * I) ** (1 / 3)) + 12 ** (1 / 3) * (3 + sqrt(3) * I) ** (1 / 3) / 12)
) [。][...]
2.1.6。隐式线加入
括号,方括号或花括号中的表达式可以在不使用反斜杠的情况下分割为多个物理行。
相同的文档列出了所有permitted Python string escape sequences。
答案 6 :(得分:0)
正如@Jimmy的出色回答,我进一步举出以下例子来说明问题。
案例1:
>>> var1 = "Adolf Hitler was a German dictator. He started the second world war."
>>> print(var1)
Adolf Hitler was a German dictator. He started the second world war.
>>>
案例2:
>>> var2 = "Adolf Hitler\
... was a German dictator.\
... He started the\
... second world war."\
...
>>> print(var2)
Adolf Hitler was a German dictator. He started the second world war.
>>>
案例3:
>>> var3 = "Adolf Hitler\nwas a German dictator.\nHe started the\nsecond world war."
>>> print(var3)
Adolf Hitler
was a German dictator.
He started the
second world war.
>>>
案例4:
>>> var4 = "Adolf Hitler\
... \nwas a German dictator.\
... \nhe started the\
... \nsecond world war."\
...
>>> print(var4)
Adolf Hitler
was a German dictator.
he started the
second world war.
>>>
@Jimmy还有另外一点没有提及。我通过以下两个例子说明了它 -
示例1:
>>> var5 = """
... This multi-line string
... has a space at the top
... and a space at the bottom
... when it prints.
... """
>>> print(var5)
This multi-line string
has a space at the top
and a space at the bottom
when it prints.
>>>
示例2:
>>> var6 = """\
... This multi-line string
... has no space at the
... top or the bottom
... when it prints.\
... """
>>> print(var6)
This multi-line string
has no space at the
top or the bottom
when it prints.