我是Python新手,需要帮助尝试理解我遇到的与串联字符串有关的两个问题。我知道可以添加字符串以使用+符号相互连接。
>>> 'a' + 'b'
'ab'
然而,我刚刚发现你甚至不需要使用+符号连接字符串(偶然/摆弄),这导致我的第一个问题需要理解 - 如何/为什么这可能!?
>>> print 'a' + 'b'
ab
此外,我也明白'\ n'字符串会产生'换行符'。但是当与我的第一个问题一起使用时。我得到以下内容。
>>> print '\n' 'a'*7
a
a
a
a
a
a
a
所以我的第二个问题出现了 - “为什么我得到7个字母'a'的新行。换句话说,不应该是转发符号*,重复字母'a'7次!?如下。
>>> print 'a'*7
aaaaaaa
请帮我澄清发生了什么。
答案 0 :(得分:18)
当"a" "b"
变为"ab"
时,这与使用+
连接字符串不同。在读取Python源代码时,为方便起见,会自动连接相邻的字符串。
这不是正常操作,这就是为什么它不遵循您对+
和*
所期望的操作顺序。
print '\n' 'a'*7
实际上与
的解释相同print '\na'*7
而不是
print '\n' + 'a'*7
答案 1 :(得分:2)
当你不用逗号分隔时,Python将字符串连接在一起:
>>> print 'a' 'b'
ab
>>> print 'a', 'b'
a b
所以你实际上打印了'\na'
7次。
答案 2 :(得分:1)
我不确定“你怎么可能”是什么意思。你编写一条规则:彼此相邻的两个字符串被连接起来。然后在解析器中实现它。为什么?因为它可以让你方便地做这样的事情:
re.findall('(<?=(foo))' # The first part of a complicated regexp
'>asdas s' # The next part
'[^asd]' # The last part
)
这样,你可以描述你正在做的事情。
当你做A * B + C时,计算机总是首先进行A次B次,然后加C,因为乘法是在加法之前。
当你通过将字符串文字放在彼此旁边并进行乘法来进行字符串连接时,首先会出现特殊的字符串连接。这意味着'\n' 'a' * 7
与('\n' 'a') * 7
相同,因此您重复的字符串为'\na'
。
答案 3 :(得分:1)
您可能已经意识到依赖相邻字符串的隐式连接有时会出现问题。此外,与+
运算符连接效率不高。如果只加入几个小字符串就不明显了,但它在规模上非常明显。
明确一点;使用''.join()
print '\n'.join(['a'*7])