2024-10-04 09:19:31 发布
网友
我试图将我的代码编译成python3模块。当我在IDLE中选择“Run module”时,它运行得很好,但是当我尝试创建分发时收到以下语法错误:
File "/usr/local/lib/python3.2/dist-packages/simpletriple.py", line 9 def add(self, (sub, pred, obj)): ^ SyntaxError: invalid syntax
有谁能帮忙指出语法有什么问题吗?以下是完整代码:
PEP 3113解释了为什么在python3中删除了这个特性“tuple parameter unpacking”。它还解释了如何移植使用它们的代码。在这种情况下,您需要更改如下函数:
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)
对于将元组作为单个参数传递并手动解压缩的版本:
对于lambda函数,不能使用赋值来解包。最好的解决方案通常是不拆包。例如,更改此选项:
lambda
lambda (x, y): (y, x)
……对此:
lambda xy: (xy[1], xy[0])
对于复杂的函数,这可能会变得很难看,但是对于复杂的函数,您可能还是想def它们。在
def
值得注意的是,通过^{}、^{}或^{}运行代码,会在def和{}中发现此问题,并提出以下解决方案:
$ echo 'lambda (x,y): (y,x)' | 2to3 - - <stdin> (original) +++ <stdin> (refactored) @@ -1 +1 @@ -lambda (x,y): (y,x) +lambda x_y: (x_y[1],x_y[0]) $ echo -e 'def foo((x,y)):\n return (y,x)\n' | 2to3 - - <stdin> (original) +++ <stdin> (refactored) @@ -1 +1 @@ -def foo((x,y)): +def foo(xxx_todo_changeme): + (x,y) = xxx_todo_changeme
如果您试图将python2.x代码移植到3.x(或双版本代码),并且不知道这两种语言,那么您几乎肯定希望使用这些工具中的一种或一个包装它们的IDE插件来提供帮助。(尽管您可能不希望按原样使用其输出。)
PEP 3113解释了为什么在python3中删除了这个特性“tuple parameter unpacking”。它还解释了如何移植使用它们的代码。在这种情况下,您需要更改如下函数:
对于将元组作为单个参数传递并手动解压缩的版本:
^{pr2}$对于
lambda
函数,不能使用赋值来解包。最好的解决方案通常是不拆包。例如,更改此选项:……对此:
对于复杂的函数,这可能会变得很难看,但是对于复杂的函数,您可能还是想
def
它们。在值得注意的是,通过^{} 、^{} 或^{} 运行代码,会在}中发现此问题,并提出以下解决方案:
def
和{如果您试图将python2.x代码移植到3.x(或双版本代码),并且不知道这两种语言,那么您几乎肯定希望使用这些工具中的一种或一个包装它们的IDE插件来提供帮助。(尽管您可能不希望按原样使用其输出。)
相关问题 更多 >
编程相关推荐