美文网首页Python小哥哥
Python 函数是第一类对象

Python 函数是第一类对象

作者: 我爱学python | 来源:发表于2019-05-13 17:04 被阅读5次

在很多资料中,经常会看到这样一句话:“Python 中的函数是第一类对象”。这里所说的第一类对象,其实是指函数作为一个对象,与其他对象具有相同的地位。

关于这一点,Guido 曾提过“First-class Everything”,他对 Python 的一个发展目标就是所有的对象都是第一类对象。也就是说,所有对象都可以赋值给变量,放进容器中,作为参数传递,用作返回值等等。

1、函数是对象

Python 中的一切皆对象,对于函数也不例外。

以一个简单的函数为例,来说明这一点:

我们都知道,对象有三大要素 - id、type、value,那么函数有吗?

很显然,它都有!当然,除了这些通用属性之外,函数还可用于一些高级操作。

2、函数可以赋值给变量

由于函数是对象,所以和任何其他对象(例如:字符串)一样,它也可以赋值给变量:

但这并不会调用函数,只不过是在函数对象上绑定了新的名称而已。

如果要调用函数,除了直接使用 greet 之外,还可以通过调用这些变量来执行相同的底层函数:

3、函数可以存储在容器中

常见的容器有很多(例如:列表、字典),它们可以存储任何对象,也包括函数。

例如,向列表中添加一些函数:

其中,greet 是我们自定义的函数,len 是内置函数,而 str.lower 是字符串中的方法。

要调用这些函数很容易,可以直接通过索引来访问:

也可以将其分配给变量,然后通过变量来调用:

4、函数可以作为参数

在函数式编程中,有一个很重要的概念 - 高阶函数,就是让函数的参数能够接收别的函数。如果使用过 map()、filter() 之类的函数,应该知道这一点。

来看下面这个函数:

可以通过传递不同的函数和信息来影响问候语,尝试传递 greet 函数:

函数的这个特性非常强大,它允许我们抽象并传递程序中的行为。

5、函数可以嵌套

与条件语句和循环语句类似,Python 也允许在一个函数中定义其他函数,这些函数通常被称为嵌套函数(或内部函数)。

来看一个示例:

当每次调用 welcome 时,它都会定义一个新的嵌套函数 greet,然后调用它:

6、函数可以作为返回值

函数不仅可以嵌套,还可以作为返回值,甚至是捕获并携带外部函数的一些状态。

对上述示例略作修改:

如果仔细观察嵌套函数 greet,你会发现它不再有任何参数了,但仍可以访问外部函数中定义的参数 msg:

看起来,greet 似乎记住了参数的值。这样的函数称为词法闭包(或简称:闭包),即使程序流不在该范围内,闭包也会记住其所包含的词法范围中的值。

7、对象可以表现得像函数

虽然对象不是函数,但是也可以被调用。在某些情况下,可以将它们当作函数来处理。

如果对象是可调用的,意味着可以对它使用圆括号 () 并传递参数:

在内部,将对象实例作为函数来“调用”会尝试执行 __call__ 方法:

并非所有的对象都可以调用,可以用内置函数 callable 来判断:

相关文章

  • Python 函数是第一类对象

    在很多资料中,经常会看到这样一句话:“Python 中的函数是第一类对象”。这里所说的第一类对象,其实是指函数作为...

  • 《Fluent Python》读书笔记-First-Class

    概览     函数在python里是作为第一类对象(First Class Objects)。在编程语言理论里,定...

  • 闭包

    曾经介绍过两篇关于函数的文章,第一篇是 关于 Python 函数是第一类对象,第二篇是关于 Lambda 函数,今...

  • 函数篇

    函数做为第一类对象 javascript中一个重要的概念:函数是第一类对象,或者称为一等公民。因为它具有对象的特性...

  • JS回调函数(深入篇)

    阅读来源:JS回调函数(深入篇) 在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类...

  • 一步一步教你认识Python闭包

    我在博客中曾经介绍过两篇关于函数的文章,第一篇是 关于 Python 函数是第一类对象,第二篇是关于 Lambda...

  • 函数(一)定义与参数

    本文对应《JavaScript忍者秘籍》第3章内容。 1.函数式编程 函数是第一类对象。 函数和对象 共性: 通过...

  • 不可遗忘的JavaScript函数

    JavaScript中函数是第一类对象。函数与对象共存,函数也可以被视为其他人一类型的JavaScript对象。函...

  • Python的函数是第一类对象(函数特性总结)

    本文对Python中的函数做了一个系统的总结。但涉及到的有一些概念并不会具体展开。 前段时间我在学习闭包,而后又接...

  • python笔记一 入门py

    id()函数,是python内置函数,查看每一个对象的地址。 type();函数查看对象的类型。 python中对...

网友评论

    本文标题:Python 函数是第一类对象

    本文链接:https://www.haomeiwen.com/subject/qtsraqtx.html