语法怪癖或为什么是有效的python

Bor*_*lik 8 python syntax

在python 2.6中,为什么以下行有效?

my_line = 'foo' 'bar'
Run Code Online (Sandbox Code Playgroud)

如果这是有效的,为什么不是以下内容:

my_list = 1 2 
Run Code Online (Sandbox Code Playgroud)

第一个例子是字符串连接,但是,以下内容也无效(感谢上帝):

foo = 'foo'
bar = 'bar'
foo_bar = foo bar
Run Code Online (Sandbox Code Playgroud)

Pet*_*sen 20

这是在进行字符串文字连接.如文档中所述,优势包括:

此功能可用于减少所需的反斜杠数量,方便地跨长行分割长字符串,甚至可以为字符串的某些部分添加注释...

它继续指出这种连接是在编译时而不是运行时完成的.

PEP 3126中描述了这背后的历史和基本原理以及删除该特征的被拒绝的建议.


jld*_*ont 8

my_line = 'foo' 'bar' 是字符串连接.

  • 仍然适用于Python 3.1但我非常不喜欢它. (3认同)
  • @Jason,我认为这是假的,因为这是在编译时完成的,而不是运行时.请参阅我的答案,以获取显示具有此功能的充分理由的链接. (2认同)
  • 这样你就可以在多行中分解字符串.你可以做一些像`my_str =('一个非常长的字符串,很难在一行'\n'和另一行上的另一个非常长的字符串组合.'`)(无法在评论中做正确的格式化,但想象一下跨越两行.)它实际上非常有用,并且在Python源代码中相当常见.对于它的价值,C/C++允许相同类型的自动字符串连接. (2认同)

Eli*_*sky 6

也许这是C的祖先.在C中,以下内容完全有效:

char* ptr = "hello " "world";
Run Code Online (Sandbox Code Playgroud)

它由C 预处理器(cpp)实现,该链接中给出的基本原理是:

这允许将长字符串拆分为多行,并且还允许在编译时将C预处理器定义和宏生成的字符串文字附加到字符串


S.L*_*ott 5

这并不矛盾.字符串和整数有不同的方法.

整数级联是没有意义的.

字符串连接是一种有意义的默认行为.