# 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())
查看文档后,我找不到有关此问题的任何信息。在不允许语法的范围内,什么可能导致解析器混淆?这看起来很奇怪,因为尽管如此,更复杂的语法也能正常工作:
# k, v somehow confuses the parser but this doesn't???
x = ('%s:%s:%s' % (k, v, k) for k, v in some_dict.items())
如果真的有歧义。为什么我们也不需要将 %s:%s:%s % (k, v, k)
也用括号括起来?
最佳答案
看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()))
需要括号来消除歧义。
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())
碰巧你已经有足够的括号来解决那里的歧义,使其能够以预期的方式运行。
关于python - 为什么在表达式字段中不允许生成器中未加括号的元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36148502/