Распаковка аргументов кортежа была удалена в Python 3.0 через PEP3113:
Распаковка параметра кортежа – это использование кортежа в качестве параметра в сигнатуре функции для автоматической распаковки аргумента последовательности. Пример:
def fxn(a, (b, c), d):
pass
Использование (b, c)
в подписи требует, чтобы вторым аргументом функции была последовательность длины два (например, [42, -13]
). Когда передается такая последовательность, она распаковывается, и ее значения присваиваются параметрам, как если бы в параметре был выполнен оператор b, c = [42, -13]
.
К сожалению, эта особенность богатых возможностей подписи функций Python, хотя и удобна в некоторых ситуациях, вызывает больше проблем, чем они того стоят. Таким образом, этот PEP предлагает их удаление из языка в Python 3.0.
Итак, если вы возьмете эту сигнатуру функции
def fun(foo, (a, b, c), bar):
pass
тогда это эквивалентно
def fun(foo, arg, bar):
a, b, c = arg
pass
таким образом вы добьетесь такого же поведения с Python 3.x.
Однако, поскольку это не ваша собственная кодовая база, я не вижу простого способа решить эту проблему (за исключением исправления обезьяны), и также может быть больше несовместимостей Python 3, которые не так легко обнаружить, как SyntaxError
s.
Интересно, что issue #783, на которую ссылается @tobias_k, закрыта, и из этого следует, что что поддержка Python 3 была решена и закончена. Кроме того, Theano делает требует поддержки Python 3 согласно классификаторам Trove.
Однако версия, которую вы используете (0.7.0), является самой последней выпущенной, и сигнатура функции, с которой вы столкнулись, на самом деле еще не найдено на текущем master
. Итак, это ошибка, вам, вероятно, следует зарегистрировать проблему в системе отслеживания проблем Theano на GitHub.
person
Lukas Graf
schedule
01.05.2015
var1
иvar2
. - person tobias_k   schedule 01.05.2015