返回介绍

对参数输出进行模拟

发布于 2024-01-29 22:24:16 字数 1182 浏览 0 评论 0 收藏 0

我们已经讨论了return语句并在例子中使用了它。这里有一个较为纯粹的技巧:因为return能够返回任意种类的对象,所以它也能够返回多个值,如果这些值封装进一个元组或其他的集合类型。实际上,尽管Python不支持一些其他语言所谓的“通过引用进行调用”的参数传递,我们通常能够通过返回元组并将结果赋值给最初的调用者的参数变量名来进行模拟。

看起来这里的代码好像返回了两个值,但是实际上只有一个:一个包含有2个元素的元组,它的圆括号是可选的,这里省略了。在调用返回之后,我们能够使用元组赋值去分解这个返回元组的组成部分。(如果你忘记怎么去做,阅读第4章“元组”一节、第9章以及第11章的“赋值语句”一节)。这段代码的实际效果就是通过明确的赋值模拟了其他语言中的输出参数。X和L在调用后发生了改变,但是这仅仅是因为代码编写而已。

注意:Python 2.X中的解包参数:前面的例子用元组赋值解包了函数返回的一个元组。在Python 2.6中,可能在传递给函数的参数中自动解包元组。在Python 2.6中,通过如下头部定义的一个函数:

可以用与期望的结构匹配的元组来调用:f((1,(2,3)))分别给a、b和c赋值为1、2和3。自然的,传递的元组可以是调用(f(T))前创建的一个对象。这个def语法在Python 3.0中不再支持。相反,像下面这样编写函数:

以便在一条显式赋值语句中解包。这种显式形式在Python 3.0和Python 2.6中都有效。参数解包在Python 2.X中是一个含糊并且很少用到的功能。此外,Python 2.6中的函数头部只支持序列赋值的元组形式;更通用的序列赋值(例如,def f((a,[b,c])):)在Python 2.6中因语法问题而无效,并且必须用显式赋值形式。

元组解包参数语法在Python 3.0的lambda函数参数列表中也是不允许的:参见本书第20章中的“为什么要在意:列表解析和map”给出的例子。有些不对称的是,元组解包赋值在Python 3.0中仍然是自动化的,以便实现循环,参见第13章的例子。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文