在语句中注释目标for无效:
>>> for i: str in test_string:
File "<stdin>", line 1
for i: str in test_string:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我想知道此时拒绝注释的原因。
历史上,冒号:在 Python 中具有多种含义。例如,它表示块的开始 ( with a as b:)、切片订阅 ( a[:]) 和字典对 ( {a: b})。
这使得在某些位置引入类型提示变得不可能或至少是不明确的:。具体而言,诸如for或 之类的块标头具有表示标头结束的with冲突含义。虽然可以:定义明确的语法,但这必须根据维护和扩展语法的未来需求进行权衡。到目前为止,这还没有被认为值得。
\n\nPEP 526 - 拒绝/推迟的提案
\n允许在
\nwithandfor语句中使用注释:这被拒绝了,因为for它会很难发现实际的可迭代对象,并且with会混淆 CPython 的 LL(1) 解析器。
目前,您可以使用前面的类型提示,或内联类型注释:
\na: str\nfor a in my_iterable:\n ...\n\nfor b in my_iterable: # type: str\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n\nPEP 526 \xe2\x80\x93 不允许注释的地方
\n仅允许单个赋值目标和单个右侧值。此外,不能注释 for 或 with 语句中使用的变量;它们可以提前注释,类似于元组解包:\n[...]
\n
您需要按照https://www.python.org/dev/peps/pep-0526/#where-annotations-aren-t-allowed在循环之前启动它
所以你可以这样做
i : str
for i in test_string:
......
......
Run Code Online (Sandbox Code Playgroud)