python - 为什么在表达式字段中不允许生成器中未加括号的元组?

标签 python python-3.x syntax generator

# 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/

相关文章:

python - 在 windows 上安装 tensorflow

python - 如何从日期时间戳列中每 5 分钟取数据框中一列的平均值?

python - 为什么 `str.format()` 会忽略其他/未使用的参数?

javascript - 参数模式(新想法 vs. 绑定(bind) vs. self/that 模式)

javascript - jQuery 中的匿名函数语法

python - 数据框 : shift expanding mean with groupby

python - 使用日期时间每小时频率创建数据框

python - 在 Pandas 中将月份从数字重命名为名称

python - 在 Django 中创建和保存对象时需要管理器吗?

php - 在 PHP 中调试 SQL 语法错误