一个解析文件的小工具,使用了lambda 表达式,在python2.x升级到python3.x 的时候报错了,报错提示也没有什么有效信息,解决之后记录一下c++lambda表达式,为了避免版权等信息,使用一个示例说明。

python2.x 代码:

c# 无参数lambda表达式_c# lambda表达式怎么读_c++lambda表达式

from functools import reduce
a = [1,2,3,4]
b=0
acc=1
b = reduce((lambda acc,(i,x): acc + (i+1)*x),enumerate(a),b)
print(b)

使用python3 运行python2.x 的代码时报错如下:

b = reduce((lambda acc,(i,x): acc + (i+1)*x),enumerate(a),b)
                                             ^
SyntaxError: invalid syntax

也就是说(i,x) 这个位置有符号错误,但是没看出来什么错误。

看vscode 的提示:

Sublist parameters are not supported in Python 3.x Pylance

就是说python3.x 不支持用子列表作为参数。

在网上查了下,可以把子列表看作一个元组c++lambda表达式,用元组作参数,不使用子列表的形式。

修改后的python3.x 代码:

from functools import reduce
a = [1,2,3,4]
b=0
acc=1
b = reduce((lambda acc,i: acc + (i[0]+1)*i[1]),enumerate(a),b)
print(b)

改过之后运行成功。

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688