long_str = ("This is a long %s" % "story." "And you are welcome to %s." % "listen")
是没有语法错误的。 然后,
long_str = ("It is %d stories." % 3 )
也是没问题的。 最后,
long_str = ("我编不下去了,随便搞%d 个测试" % 123 "这是一个%s 测试啊" % "有趣的")
就是说这种方式来组合字符串, % 后的元素穿插在中间的,只能是字符串,其他类型元素,只能安排在最后。 不然会报语法错误。大家知道是那部分的 python 文档解释到吗?
我觉得重点是:
只用空格分开的两个字符串,会被解释成一个字符串。
其实这其中也就不涉及运算优先级的问题了。
1
wnh3yang 2019-04-11 14:15:23 +08:00 1
我不是程序员,但我看出来错误了。
<img src="https://img.vim-cn.com/ff/7eeb833337ed48124facf6489efb169a13a141.png" alt=""> 两个字符串放一起会自动拼成一个字符串, 数字和字符串放一起报语法错误。 |
2
lithiumii 2019-04-11 14:17:45 +08:00
% 是用来把变量插到字符串里面的,当然是完整的字符串写前面,别的扔后面……
但是,我从来没学会过用 %,跟谜语似的。反正你写 py 的话建议用 str.format(),比如: long_str = ("我编不下去了,随便搞{}个测试这是一个{}测试啊".format(123, "有趣的")) https://docs.python.org/3.7/library/string.html#formatstrings |
3
MartinWu OP @lithiumii #2 但是我觉得你的这个解释没法解释为什么:
``` python long_str = ("This is a long %s" % "story." "And you are welcome to %s." % "listen") ``` 语法没报错,这也是中间穿插了一个 % 渲染,只是这里是"story" 而不是 123。 |
4
besto 2019-04-11 14:23:32 +08:00
123 '错误'
'123' '正确' 好理解一点了么 |
5
Alexhex 2019-04-11 14:26:35 +08:00
你试着 print 一下第一个。
|
6
Alexhex 2019-04-11 14:31:49 +08:00
说错了,你试着 print 一下下面这个:
long_str = ("This is a long %s, but" % "story." " you are welcome to %s." % "listen") |
7
wnh3yang 2019-04-11 14:33:26 +08:00 1
@MartinWu
我觉得是运算优先级的问题: ``` python long_str = ("This is a long %s" % "story." "And you are welcome to %s." % "listen") ``` "story." "And you are welcome to %s." 最先合并成一个字符串。会变成: ``` python long_str = ("This is a long %s" % "story.And you are welcome to %s." % "listen") ``` 再变成 ``` python long_str = ("This is a long %s" % "story.And you are welcome to listen.") ``` 再变成 ``` python long_str = ("This is a long story.And you are welcome to listen.") ``` 所以 ``` python long_str = ("我编不下去了,随便搞%d 个测试" % 123 "这是一个%s 测试啊" % "有趣的") ``` 123 "这是一个%s 测试啊" 这个数字和字符串合并的过程会报语法错误 |
8
LFly 2019-04-11 14:36:55 +08:00
print(123 "long str")
print("123" "long str") long_str = ("我编不下去了,随便搞%s 个测试" % 123, "这是一个%s 测试啊" % "有趣的") |
9
Tink 2019-04-11 14:37:41 +08:00
"123"
|
10
lihnzx 2019-04-11 14:42:03 +08:00
"我编不下去了,随便搞%d 个测试" % 123 + "这是一个%s 测试啊" % "有趣的"
没明白你的意思 拼接字符串使用 format 或 join 性能更高一点 |
11
rrfeng 2019-04-11 14:50:03 +08:00 via Android
("aaaa" "bbbbb") == ("aaaabbbbb")
(3 "aaaaaa") = error 看懂这个就好了跟 % 没关系 |