查看: 1807|回复: 2

SyntaxError: invalid syntax

[复制链接]

19

主题

68

帖子

225

积分

论坛管理

Rank: 4

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

  2. class SimpleGraph:
  3.     def __init__(self):
  4.         self._spo = {}
  5.         self._pos = {}
  6.         self._osp = {}

  7.     def add(self, (sub, pred, obj)):
  8.         """
  9.         Adds a triple to the graph.
  10.         """
  11.         self._addToIndex(self._spo, sub, pred, obj)
  12.         self._addToIndex(self._pos, pred, obj, sub)
  13.         self._addToIndex(self._osp, obj, sub, pred)
复制代码


回复

使用道具 举报

5

主题

41

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2018-9-19 17:29:52 | 显示全部楼层
本帖最后由 上条把妹之手 于 2018-9-19 17:39 编辑

在Python 3中删除了“元组参数解包”功能。将
  1. def add(self, (sub, pred, obj)):
  2.     self._addToIndex(self._spo, sub, pred, obj)
  3.     self._addToIndex(self._pos, pred, obj, sub)
  4.     self._addToIndex(self._osp, obj, sub, pred)
复制代码

改成一个将元组作为单个参数传递并手动解压缩的版本:
  1. def add(self, sub_pred_obj):
  2.     sub, pred, obj = sub_pred_obj
  3.     self._addToIndex(self._spo, sub, pred, obj)
  4.     self._addToIndex(self._pos, pred, obj, sub)
  5.     self._addToIndex(self._osp, obj, sub, pred)
复制代码

________________________________________
对于lambda函数,您不能使用赋值来解压缩。最好的解决方案通常是不拆包。例如,改变这个:
lambda (x, y): (y, x)
......对此:
lambda xy: (xy[1], xy[0])
对于复杂的功能,这可能会变得很丑陋 - 但是对于复杂的功能,def无论如何你可能都想要它们。

回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-9-19 17:38:08 | 显示全部楼层
正如二楼所说的那样python3不支持元组参数解包,换成多个参数就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表