为什么表达式字段中不允许在生成器中使用无保护的元组?

Ala*_*ACK 2 python syntax generator python-3.x

# why is the following invalid
x = (k, v for k, v in some_dict.items())

# but if we wrap the expression part in parentheses it works
x = ((k, v) for k, v in some_dict.items())
Run Code Online (Sandbox Code Playgroud)

我查看了文档并且似乎没有找到任何相关内容?什么可能使解析器混淆不允许语法?尽管工作更复杂:

# k, v somehow confuses the parser but this doesnt???
x = ('%s:%s:%s' % (k, v, k) for k, v in some_dict.items())
Run Code Online (Sandbox Code Playgroud)

那么我们怎么%s:%s:%s % (k, v, k)也不需要用周围的parantheses 包裹呢?

Tig*_*kT3 5

看看x = (k, v for k, v in some_dict.items()):

x = (k, v for k, v in some_dict.items())
x = ((k, v) for k, v in some_dict.items())
x = (k, (v for k, v in some_dict.items()))
Run Code Online (Sandbox Code Playgroud)

需要括号来消除歧义.

x = ('%s:%s:%s' % (k, v, k) for k, v in some_dict.items()) 也需要括号:

x = ('%s:%s:%s' % k, v, k for k, v in some_dict.items())
x = ('%s:%s:%s' % k, (v, k) for k, v in some_dict.items())
x = ('%s:%s:%s' % (k, v, k) for k, v in some_dict.items())
Run Code Online (Sandbox Code Playgroud)

只是碰巧你已经有足够的括号来解决那里的歧义,使其能够以预期的方式运行.