Django ChartIt Python 3中不支持Tuple参数解包

时间:2015-11-14 14:26:35

标签: python django python-3.x

安装并实现Django Chartit后,我收到一条错误消息:

Exception Type: SyntaxError at /currencypairs/
Exception Value: invalid syntax (chartdata.py, line 109)

当我检查chartdata.py中的第109行时,它会显示带有错误消息tuple paramater unpacking not supported in Python3的红色波浪线。

sort_grp_fn = lambda (tk, td): tuple(chain(str(td['source'].query), 
                                          [td[t] for t in addl_grp_terms]))

同样的错误在第117行。

sort_by_fn = lambda (tk, td): -1*(abs(td[sort_by_term]))

由于我还没有Lambda表达式的经验,我不知道如何解决这个特定问题。

1 个答案:

答案 0 :(得分:2)

两个lambda都接受元组作为唯一参数,将该元组解压缩到变量tktd中。 Python 3中删除了此功能,因为它与新的Python 3功能注释的语法发生冲突。

你可以通过给lambdas一个参数,并使用subscription来访问元组的两个元素来解决这个问题:

sort_grp_fn = lambda tk_td: tuple(chain(str(tk_td[1]['source'].query), 
                                          [tk_td[1][t] for t in addl_grp_terms]))

sort_by_fn = lambda tk_td: -1*(abs(tk_td[1][sort_by_term]))

我将(tk, td)替换为tk_td以及tdtk_td[1]的任何引用(两个lambdas都忽略了tk值。)

请注意,包裹可能存在其他问题;移植到Python 3并不总是那么容易。