tuple parameter unpacking is not supported in python3问题修复

举报
SHQ1874009 发表于 2024/02/06 09:28:39 2024/02/06
【摘要】 一、问题分析在解决图像配准过程中, 涉及到如下代码,return reduce(lambda x, (y, z): x | (z << y), enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())), 0)在Python3环境下,提示“tuple parameter unpacking is not supported in ...

一、问题分析

在解决图像配准过程中, 涉及到如下代码,

return reduce(lambda x, (y, z): x | (z << y), enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())), 0)

Python3环境下,提示“tuple parameter unpacking is not supported in python3”。翻译成中文就是“拆箱的tuple元组参数在python3中不得到支持”即此种参数形式在python3下废弃了。

参考PEP 3113 – Removal of Tuple Parameter Unpacking。可发现,在python3中之所以去除tuple元素的参数形式,在PEP 3113中是这样说的

“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.”(Python的这一丰富函数签名属性,虽然在有些使用场景下非常便利–参数的自动拆包,但是其造成的问题多于便利性。)

上面提到的自动拆箱功能如下所示:

def fxn(a, (b, c), d):
    Pass

在调用fxn函数时第二个参数就需要保证其长度为2,例如[42, -13],当参数传递时,就会完成参数自动拆箱,即b, c = [42, -13]。

二、替换方案

那么,在Python3中,如何取代tuple元素的传参形式呢?PEP 3113中同样给出了答案。

As tuple parameters are used by lambdas because of the single expression limitation, they must also be supported. This is done by having the expected sequence argument bound to a single parameter and then indexing on that parameter:

lambda (x, y): x + y

will be translated into:

lambda x_y: x_y[0] + x_y[1]

看到这里,相信大家都明白了,Python3中使用x_y的形式代替(x,y),使其类似于列表的形式,在调用的时候,使用x_y[index]的形式。

在利用Python做图像配准时,需要安装PIL(Python Image Lib)模块。而PIL官网提示信息为:

“The current free version is PIL 1.1.7. This release supports Python1.5.2 and newer, including 2.5 and 2.6. A version for 3.X will be released later.”

即当前提供的PIL模块还不支持Python3。此时就需要使用其它模块来替换PIL模块。有人提供了非官方的64位库,叫做Pillow,下载下来,是个.whl 结尾的文件,这个其实就是python使用的一种压缩文件,后缀名改成zip,可以打开。这个需要用 pip 安装。

在dos中切换至pip文件夹,输入命令“pip install Pillow-4.1.0-cp35-none-win_amd64.whl”。
这里写图片描述
至此,Pillow模块安装完成。

在使用时,注意要用 ‘from PIL import Image’ 代替 ‘import Image’。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。