Strange syntax error with theano
我正在尝试在python 3.4中使用我的代码中的theano。 但是,有许多函数具有以下奇怪的语法
1 2 | def c_code(self, node, name, (var1, var2), (var3,), sub): ... |
即它们在函数定义中有括号。
Python会对它们抛出语法错误
File".../Theano-0.7.0/theano/scalar/basic.py", line 1011
def c_code(self, node, name, (var1, var2), (var3, ), sub):
^
SyntaxError: invalid syntax
现在,一旦我删除那些额外的括号,一切都很好,但我是python的新手,并注意到python 3中有很多变化,所以这些括号可能需要用其他东西替换而不是删除。
有人可以向我解释(a)函数定义中包含括号的含义是什么? (b)这些是否以及如何与python 3一起使用?
通过PEP3113在Python 3.0中删除了元组参数解包:
Tuple parameter unpacking is the use of a tuple as a parameter in a
function signature so as to have a sequence argument automatically
unpacked. An example is:
1
2 def fxn(a, (b, c), d):
passThe use of
(b, c) in the signature requires that the second argument to the function be a sequence of length two (e.g.,[42, -13]
). When such a sequence is passed it is unpacked and has its values
assigned to the parameters, just as if the statementb, c = [42, -13]
had been executed in the parameter.Unfortunately this feature of Python's rich function signature
abilities, while handy in some situations, causes more issues than
they are worth. Thus this PEP proposes their removal from the language
in Python 3.0.
所以如果你采取这个功能签名
1 2 | def fun(foo, (a, b, c), bar): pass |
那相当于
1 2 3 | def fun(foo, arg, bar): a, b, c = arg pass |
所以这就是你用Python 3.x实现相同行为的方式。
但是,由于这不是您自己的代码库,我没有看到解决这个问题的简单方法(缺少猴子修补),并且可能还有更多的Python 3不兼容性不像
有趣的是,由@tobias_k链接的问题#783已经关闭,从中可以看出Python 3支持已经解决并完成了。此外,Theano确实根据它的Trove分类器声称支持Python 3。
但是,您使用的版本(0.7.0)是最近发布的版本,您遇到的函数签名实际上仍然可以在当前