写点什么

Python 进阶 (四十一)Python3 解决“tuple parameter unpacking is not supported in python3”

  • 2022-11-16
    江苏
  • 本文字数:1083 字

    阅读完需:约 4 分钟

Python进阶(四十一)Python3解决“tuple parameter unpacking is not supported in python3”

一、问题分析

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


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]的形式。

三、拓展阅读 windows 64 位安装 Pillow 模块替换 PIL 模块

在利用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'。

发布于: 刚刚阅读数: 5
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Python进阶(四十一)Python3解决“tuple parameter unpacking is not supported in python3”_Python3_No Silver Bullet_InfoQ写作社区