python - 如何在用python编写的解释器中实现多重赋值?

标签 python python-2.7 python-3.x

我正在用 python 编写一个解释器,我正在关注这个例子 http://www.dabeaz.com/ply/example.html

我想知道如何实现多重赋值,例如:

a=b=c=1a=(b=1)*1

我尝试了一些规则,但都是徒劳的。我知道解析应该是这样的。

a   b   c  1
 \  \    \/
  \  \   /
   \  \ /
     \ /

我只是不确定如何使用 PLY 来编写它。

最佳答案

大多数语言通过将赋值声明为表达式来逃避它。

在您的示例中,分配变为:

def p_expression_assign(t):
    'expression : NAME EQUALS expression'
    t[0] = names[t[1]] = t[3]

我只是在函数名称和文档字符串语法中将“语句”更改为“表达式”,并“返回”(分配给 t[0])正在分配的值.

我说“逃避”是因为其他语言(例如 Python)走得更远,因为它们允许多重赋值,但禁止在任何其他类型的表达式中使用赋值的结果。

但是你的第二个例子 a=(b=1)*1 告诉我你想要前者,更宽松(或类似 C)的多重赋值形式。

关于python - 如何在用python编写的解释器中实现多重赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932717/

相关文章:

python - 将嵌套的序列化数据作为一个获取

python-2.7 - 如何在不制作 .egg 文件的情况下编写 setup.py 来安装 python 模块

python - 使用map()函数优化速度

python - 当这些列的名称与列表中的名称匹配时,如何跨 pandas 列添加所有值?

python - 是否可以优先锁定锁?

python - 如何加快pytest

javascript - 如何在博客中隐藏要点

python - boxlayout中的文本左对齐

python - Winreg Python、QueryInfoKey 给出的上次更改的日期/时间不正确?

python - 在迭代文档时存储 3 个不同的变量(字典或列表)?