【问题标题】:How to implement multiple assignment in an interpreter written in python?如何在用python编写的解释器中实现多重赋值?
【发布时间】:2013-04-10 17:39:52
【问题描述】:

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

我想知道如何实现多个分配,例如:

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

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

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

我只是不确定如何使用 PLY 编写此内容。

【问题讨论】:

    标签: python python-2.7 python-3.x


    【解决方案1】:

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

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

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

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

    我说“侥幸逃脱”是因为其他语言(例如 Python)会加倍努力,因为它们允许多次赋值,但禁止在任何其他类型的表达式中使用赋值结果。

    但是您的第二个示例 a=(b=1)*1 告诉我您想要前一种、更宽松(或类似 C)的多重赋值形式。

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多