Вложенные аргументы не компилируются

Я пытаюсь скомпилировать свой код в модуль Python 3. Он отлично работает, когда я выбираю «Run module» в 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) def _addToIndex(self, index, a, b, c): """ Adds a triple to a specified index. """ if a not in index: index[a] = {b:set([c])} else: if b not in index[a]: index[a][b] = set([c]) else: index[a][b].add(c) def remove(self, (sub, pred, obj)): """ Remove a triple pattern from the graph. """ triples = list(self.triples((sub, pred, obj))) for (delSub, delPred, delObj) in triples: self._removeFromIndex(self._spo, delSub, delPred, delObj) self._removeFromIndex(self._pos, delPred, delObj, delSub) self._removeFromIndex(self._osp, delObj, delSub, delPred) def _removeFromIndex(self, index, a, b, c): """ Removes a triple from an index and clears up empty indermediate structures. """ try: bs = index[a] cset = bs[b] cset.remove(c) if len(cset) == 0: del bs[b] if len(bs) == 0: del index[a] # KeyErrors occur if a term was missing, which means that it wasn't a valid delete: except KeyError: pass def triples(self, (sub, pred, obj)): """ Generator over the triple store. Returns triples that match the given triple pattern. """ # check which terms are present in order to use the correct index: try: if sub != None: if pred != None: # sub pred obj if obj != None: if obj in self._spo[sub][pred]: yield (sub, pred, obj) # sub pred None else: for retObj in self._spo[sub][pred]: yield (sub, pred, retObj) else: # sub None obj if obj != None: for retPred in self._osp[obj][sub]: yield (sub, retPred, obj) # sub None None else: for retPred, objSet in self._spo[sub].items(): for retObj in objSet: yield (sub, retPred, retObj) else: if pred != None: # None pred obj if obj != None: for retSub in self._pos[pred][obj]: yield (retSub, pred, obj) # None pred None else: for retObj, subSet in self._pos[pred].items(): for retSub in subSet: yield (retSub, pred, retObj) else: # None None obj if obj != None: for retSub, predSet in self._osp[obj].items(): for retPred in predSet: yield (retSub, retPred, obj) # None None None else: for retSub, predSet in self._spo.items(): for retPred, objSet in predSet.items(): for retObj in objSet: yield (retSub, retPred, retObj) # KeyErrors occur if a query term wasn't in the index, so we yield nothing: except KeyError: pass def value(self, sub=None, pred=None, obj=None): for retSub, retPred, retObj in self.triples((sub, pred, obj)): if sub is None: return retSub if pred is None: return retPred if obj is None: return retObj break return None def load(self, filename): f = open(filename, "rb") reader = csv.reader(f) for sub, pred, obj in reader: sub = unicode(sub, "UTF-8") pred = unicode(pred, "UTF-8") obj = unicode(obj, "UTF-8") self.add((sub, pred, obj)) f.close() def save(self, filename): f = open(filename, "wb") writer = csv.writer(f) for sub, pred, obj in self.triples((None, None, None)): writer.writerow([sub.encode("UTF-8"), pred.encode("UTF-8"), obj.encode("UTF-8")]) f.close() if __name__ == "__main__": g = SimpleGraph() g.add(("blade_runner", "name", "Blade Runner")) g.add(("blade_runner", "name", "Blade Runner")) g.add(("blade_runner", "release_date", "June 25, 1982")) g.add(("blade_runner", "directed_by", "Ridley Scott")) print list(g.triples((None, None, None))) print list(g.triples(("blade_runner", None, None))) print list(g.triples(("blade_runner", "name", None))) print list(g.triples(("blade_runner", "name", "Blade Runner"))) print list(g.triples(("blade_runner", None, "Blade Runner"))) print list(g.triples((None, "name", "Blade Runner"))) print list(g.triples((None, None, "Blade Runner"))) print list(g.triples(("foo", "name", "Blade Runner"))) print list(g.triples(("blade_runner", "foo", "Blade Runner"))) print list(g.triples(("blade_runner", "name", "foo"))) 

One Solution collect form web for “Вложенные аргументы не компилируются”

PEP 3113 объясняет, почему эта функция «распаковка параметров tuple» была удалена в 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) 
  • Могут ли именованные аргументы использоваться с перечислениями Python?
  • Не удалось установить графический файл для python3 на ubuntu 14.04
  • Переменные, объявленные в коде exec'ed, не становятся локальными в Python 3 - документации?
  • Как добавить динамические модули python в спецификации PyInstaller?
  • Динамически добавлять методы в класс в Python 3.0
  • Макет множественного возвращаемого значения, включая исходное поведение
  • Сортировка списка кортежей в зависимости от двух элементов
  • Как хранить `pandas.DataFrame` в двоичном формате PANDAS-LOADABLE, отличном от` pickle`
  • Использовать «байт-подобный объект» из urlopen.read с JSON?
  • Каков наиболее эффективный способ копирования внешнего буфера в байты
  • Это все еще Python 2.6 против Python 3?
  •  
    Interesting Posts for Van-Lav

    В python, как получить подпарамеры для чтения в аргументе родительского парсера?

    Расчет положения звезды в небе, PyEphem

    запустить исходный код python по строкам

    Можно ли использовать пользовательский ввод для регулярных выражений Python?

    Почему ключи словаря должны быть неизменными?

    Pandas переименовывает имена столбцов с определенными шаблонами и делает агрегацию

    Python, Как получить все внешние IP-адреса с несколькими NIC

    Как увеличить значение с помощью ведущих нулей?

    Программная настройка пределов контроля доступа в моските

    Как интегрировать travis ci с охватом тестирования кодека в Python?

    Как маршрутизировать сообщения журнала из многопроцессорного модуля в файл?

    Как запустить подпроцесс pdftk во время wsgi?

    Генератор ссылок с использованием django или любого модуля python

    scikits.audiolab на Ubuntu Oneiric – ImportError: нет модуля с именем _sndfile

    форматирование частичной строки

    Python - лучший язык программирования в мире.