深度大佬进修 发表于 2018-9-19 17:28:39

SyntaxError: invalid syntax

我正在尝试将我的代码编译成Python 3模块。我在IDLE中选择“运行模块”时运行正常,但在尝试创建分发时收到以下语法错误:
File "/usr/local/lib/python3.2/dist-packages/simpletriple.py", line 9
    def add(self, (sub, pred, obj)):
                  ^
SyntaxError: invalid syntax
任何人都可以帮助指出语法有什么问题吗?这是完整的代码:
import csv

class SimpleGraph:
    def __init__(self):
      self._spo = {}
      self._pos = {}
      self._osp = {}

    def add(self, (sub, pred, obj)):
      """
      Adds a triple to the graph.
      """
      self._addToIndex(self._spo, sub, pred, obj)
      self._addToIndex(self._pos, pred, obj, sub)
      self._addToIndex(self._osp, obj, sub, pred)

上条把妹之手 发表于 2018-9-19 17:29:52

本帖最后由 上条把妹之手 于 2018-9-19 17:39 编辑

在Python 3中删除了“元组参数解包”功能。将
def add(self, (sub, pred, obj)):
    self._addToIndex(self._spo, sub, pred, obj)
    self._addToIndex(self._pos, pred, obj, sub)
    self._addToIndex(self._osp, obj, sub, pred)
改成一个将元组作为单个参数传递并手动解压缩的版本:
def add(self, sub_pred_obj):
    sub, pred, obj = sub_pred_obj
    self._addToIndex(self._spo, sub, pred, obj)
    self._addToIndex(self._pos, pred, obj, sub)
    self._addToIndex(self._osp, obj, sub, pred)
________________________________________
对于lambda函数,您不能使用赋值来解压缩。最好的解决方案通常是不拆包。例如,改变这个:
lambda (x, y): (y, x)
......对此:
lambda xy: (xy, xy)
对于复杂的功能,这可能会变得很丑陋 - 但是对于复杂的功能,def无论如何你可能都想要它们。

污妖王 发表于 2018-9-19 17:38:08

正如二楼所说的那样python3不支持元组参数解包,换成多个参数就好了
页: [1]
查看完整版本: SyntaxError: invalid syntax