标记化模块中的Python 2换行标记
我正在使用Python中的标记化模块中的Python 2换行标记,python,tokenize,Python,Tokenize,我正在使用Python中的tokenize模块,不知道为什么有两种不同的换行符: NEWLINE = 4 NL = 54 任何能产生这两个令牌的代码示例都将不胜感激。根据python文档: 标记化.NL 用于指示非终止换行符的标记值。新线 标记表示Python代码逻辑行的结尾;NL代币 当一个逻辑代码行在多个位置上连续时生成 物理线路 更多信息:除了 换行符表示Python代码逻辑行的结尾; NL令牌是在逻辑代码行继续执行时生成的 多条物理线路 这里有一个例子 def a_func(a, b)
tokenize
模块,不知道为什么有两种不同的换行符:
NEWLINE = 4
NL = 54
任何能产生这两个令牌的代码示例都将不胜感激。根据python文档: 标记化.NL
用于指示非终止换行符的标记值。新线 标记表示Python代码逻辑行的结尾;NL代币 当一个逻辑代码行在多个位置上连续时生成 物理线路
更多信息:除了 换行符表示Python代码逻辑行的结尾; NL令牌是在逻辑代码行继续执行时生成的 多条物理线路 这里有一个例子
def a_func(a, b):
pass
这将产生
1,0-1,3: NAME 'def'
1,4-1,10: NAME 'a_func'
1,10-1,11: OP '('
1,11-1,12: NAME 'a'
1,12-1,13: OP ','
1,14-1,15: NAME 'b'
1,15-1,16: OP ')'
1,16-1,17: OP ':'
1,17-1,18: NEWLINE '\n'
2,0-2,4: INDENT ' '
2,4-2,8: NAME 'pass'
2,8-2,9: NEWLINE '\n'
3,0-3,0: DEDENT ''
鉴于
def a_func(a,
b):
pass
会产生这个
1,0-1,3: NAME 'def'
1,4-1,10: NAME 'a_func'
1,10-1,11: OP '('
1,11-1,12: NAME 'a'
1,12-1,13: OP ','
1,13-1,14: NL '\n'
2,11-2,12: NAME 'b'
2,12-2,13: OP ')'
2,13-2,14: OP ':'
2,14-2,15: NEWLINE '\n'
3,0-3,4: INDENT ' '
3,4-3,8: NAME 'pass'
3,8-3,9: NEWLINE '\n'
4,0-4,0: DEDENT ''
4,0-4,0: ENDMARKER ''
注意1,13-1,14:NL'\n'
在a之后,
基本上,换行符和NL之间的区别在于NL是在未“完成”的行之后生成的:
def a_func(a, b):
结果为换行,因为整个逻辑行位于一个物理行上
def another_func(a,
b)
结果在NL中,因为1条逻辑线的代码分布在2条物理线上在Python代码中至少有4种可能的情况是
'\n'
;其中2个由代币编码:
对应的标记代码>
\
——与文档中似乎指出的相反,这种情况根本不会产生任何标记# case 1
a = 6
b = 7
# case 2
answer = (
a * b
)
# case 3
format = """
A multiline string
"""
# case 4
print "something that is continued" \
"on the following line."
给出了所有可能的情况:
1,0-1,8: COMMENT '# case 1'
1,8-1,9: NL '\n'
2,0-2,1: NAME 'a'
2,2-2,3: OP '='
2,4-2,5: NUMBER '6'
2,5-2,6: NEWLINE '\n'
3,0-3,1: NAME 'b'
3,2-3,3: OP '='
3,4-3,5: NUMBER '7'
3,5-3,6: NEWLINE '\n'
4,0-4,1: NL '\n'
5,0-5,8: COMMENT '# case 2'
5,8-5,9: NL '\n'
6,0-6,6: NAME 'answer'
6,7-6,8: OP '='
6,9-6,10: OP '('
6,10-6,11: NL '\n'
7,4-7,5: NAME 'a'
7,6-7,7: OP '*'
7,8-7,9: NAME 'b'
7,9-7,10: NL '\n'
8,0-8,1: OP ')'
8,1-8,2: NEWLINE '\n'
9,0-9,1: NL '\n'
10,0-10,8: COMMENT '# case 3'
10,8-10,9: NL '\n'
11,0-11,6: NAME 'format'
11,7-11,8: OP '='
11,9-13,3: STRING '"""\nA multiline string\n"""'
13,3-13,4: NEWLINE '\n'
14,0-14,1: NL '\n'
15,0-15,8: COMMENT '# case 4'
15,8-15,9: NL '\n'
16,0-16,5: NAME 'print'
16,6-16,35: STRING '"something that is continued"'
17,4-17,28: STRING '"on the following line."'
17,28-17,29: NEWLINE '\n'
18,0-18,0: ENDMARKER ''