返回介绍

函数对象:属性和注解

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

Python函数比我们想象的更为灵活。正如我们在本书的这一部分中所看到的,Python中的函数比一个编译器的代码生成规范还要多——Python函数是俯拾皆是的对象,自身全部存储在内存块中。同样,它们可以跨程序自由地传递和间接调用。它们也支持与调用根本无关的操作——属性存储和注解。

间接函数调用

由于Python函数是对象,我们可以编写通用的处理它们的程序。函数对象可以赋值给其他的名字、传递给其他函数、嵌入到数据结构、从一个函数返回给另一个函数,等等,就好像它们是简单的数字或字符串。函数对象还恰好支持一个特殊操作:它们可以由一个函数表达式后面的括号中的列表参数调用。然而,函数和其他对象一样,属于通用的领域。

我们已经在前面的示例中看到了函数的这些通用应用中的一些,但一个快速概览对于强调对象模型有帮助。例如,对于用于一条def语句中的名称,真的没有什么特别的:它只是当前作用域中的一个变量赋值,就好像它出现在一个=符号的左边。在def运行之后,函数名直接是一个对象的引用——我们可以自由地把这个对象赋给其他的名称并且通过任何引用调用它:

由于参数通过赋值对象来传递,这就像是把函数作为参数传递给其他函数一样容易。随后,被调用者可能通过把参数添加到括号中来调用传入的函数:

我们甚至可以把函数对象的内容填入到数据结构中,就好像它们是整数或字符串一样。例如,下面的程序把函数两次嵌套到一个元组列表中,作为一种动作表。由于像这样的Python复合类型可以包含任意类型的对象,这里也没有什么特殊的:

这段代码只是遍历schedule列表,每次遍历的时候使用一个参数来调用echo函数(注意for循环头部的元组解包赋值,我们在第13章中介绍过)。正如我们在第17章的示例中所见到的,函数也可以创建并返回以便之后使用:

Python的通用对象模式和无须类型声明使得该编程语言有了令人惊讶的灵活性。

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

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

发布评论

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