在python中你可以这样说:
x = """""" # x = ''
Python词法分析器是否将此视为两个三重引号,内部没有任何内容?即沿着x = """ """
(没有空格)?
这是我的直接想法。但是,这在python中是可能的:
>>> "4" "5"
'45'
>>> # and
>>> "4""5"
'45'
所以我可以看到x = """"""
也可能沿着x = "" "" ""
(没有空格)的方向排列。
我只是想知道,""""""
是否被列为两个三重引号或三对正常引号?或完全不同的东西?谢谢!
答案 0 :(得分:8)
您可以使用tokenizer:
来判断>>> from StringIO import StringIO
>>> from tokenize import generate_tokens as gt
>>> from pprint import pprint as pp
>>> code = 'x=""""""'
>>> codeio = StringIO(code)
>>> tokens = list(gt(codeio.readline))
>>> pp(tokens)
[(1, 'x', (1, 0), (1, 1), 'x=""""""'),
(51, '=', (1, 1), (1, 2), 'x=""""""'),
(3, '""""""', (1, 2), (1, 8), 'x=""""""'),
(0, '', (2, 0), (2, 0), '')]
第一个标记是' x'。第二个是' ='第三个是"""""""'。没有三个""''令牌。
P.S。比较:
>>> othercode='y="led" "zeppelin"'
>>> othercodeio = StringIO(othercode)
>>> othertokens = list(gt(othercodeio.readline))
>>> pp(othertokens)
[(1, 'y', (1, 0), (1, 1), 'y="led" "zeppelin"'),
(51, '=', (1, 1), (1, 2), 'y="led" "zeppelin"'),
(3, '"led"', (1, 2), (1, 7), 'y="led" "zeppelin"'),
(3, '"zeppelin"', (1, 8), (1, 18), 'y="led" "zeppelin"'),
(0, '', (2, 0), (2, 0), '')]
答案 1 :(得分:1)
它词汇上只有一个字符串。三引号字符串是唯一可以跨越多行的形式(与其他语言不同,它允许所有字符串,或者没有字符串跨越行)。
这个特定的语法可能被选中,因为它使语法高亮简单,标记匹配的引号对。虽然这仍然可能错误地突出显示无效的python(跨越行的单引号字符串),但通常它对于文本编辑器来说已经足够了。
解析器在读取引号时会检查两个相同类型的引用,如果找到它们,则仅在三个连续引号上终止字符串。否则它会在下一个引号上终止字符串,除非首先有换行符,否则会产生错误。
答案 2 :(得分:0)
它仅被识别为一对三引号。
检查
>>> id("""""")
140579203310856
>>> id("")
140579203310856
>>> id("" "" "")
140579203310856
这基本上意味着,这对三引号的标识与普通引用相同。
另外,如果你输入两个双引号的id,如下所示
>>> id("""")
....
它不会终止,因为词法分析器现在将其视为文档字符串并期望字符串有效终止。
答案 3 :(得分:-1)
如果你没有文字,那就是一样的。 尝试以下方法:
>>> """abc"""
'abc'
>>> "a""b""c"
'abc'
>>> "a""b""c" == """abc"""
True
答案 4 :(得分:-2)
您可以使用ast
模块查看python用于此的语法树。 e.g:
>>> import ast
>>> source = '""""""""'
>>> node = ast.parse(source, mode='eval')
>>> ast.dump(node)
"Expression(body=Str(s=''))"
如您所见,它是一个空字符串。