Python 进阶 (四十一)Python3 解决“tuple parameter unpacking is not supported in python3”
一、问题分析
在解决图像配准过程中, 涉及到如下代码,
在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 的这一丰富函数签名属性,虽然在有些使用场景下非常便利--参数的自动拆包,但是其造成的问题多于便利性。)
上面提到的自动拆箱功能如下所示:
在调用 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'。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/12f2be931459749da20337ef2】。文章转载请联系作者。
评论