Python笔记 · First-Class Functions | 函数是“一等”的
Posted bluishglc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python笔记 · First-Class Functions | 函数是“一等”的相关的知识,希望对你有一定的参考价值。
“函数是一等(First-Class)的”是众多函数式编程语言的基本特性,Python具备一定的函数式编程语言特性,其中就包括了将函数视为“一等对象”这一特性,即函数与对象、类具有等同的地位,具体体现为:
- 一个函数就是一个
Object
类型的实例 - 你可以在函数中定义和存储变量
- 你可以把函数作为变量进行赋值和传递
- 你可以把函数作为参数传递给另一个函数
- 你可以把函数作为返回值从一个函数中返回
在Python中,函数作为与对象地位相同的“一等”公民,是有最基本的“资格认证”的:函数也拥有对象模型的三个通用属性:id、类型、值。看下面这段代码:
>>> def my_fun():
... print("This is a function")
...
>>> my_fun()
This is a function
>>>
>>> # show id of my_fun
>>> id(my_fun)
2531602861944
>>>
>>> # show type of my_fun
>>> type(my_fun)
<class 'function'>
>>>
>>> # show value of my_fun
>>> my_fun
<function my_fun at 0x0000024D6F4A0F78>
>>>
当我们在函数明后使用()
时就是在调用/执行函数,但当仅仅使用函数名不带()
时,就是单纯地引用函数(对象)本身了,此时,它可以赋值给另一个变量,也可以作为参数传递或作为返回值返回。
反过看,既然函数本质上已经是一个对象了,那么一个类(对象)也可以很容易地“成为”一个函数:即使用方法和调用函数一样。做法就是实现__call__
这个dunder方法,例如这样:
class Add:
def __init__(self, n):
self.n = n
def __call__(self, x):
return self.n + x
以下是调用代码
...
>>> add = Add(1) # 实例化
>>> add(4) # 在对象后再接一个`()`,填入必要的参数,此时会调用`__call__`方法
5
>>>
从这个示例中我们可以看到,在Python中,函数和对象实际上是双向打通的!地位是一样的,且可以相互转换。
以上是关于Python笔记 · First-Class Functions | 函数是“一等”的的主要内容,如果未能解决你的问题,请参考以下文章