把函数视为对象

在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满
足下述条件的程序实体:

  • 在运行时创建
  • 能赋值给变量或数据结构中的元素
  • 能作为参数传给函数
  • 能作为函数的返回结果

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

看看下面两个示例:

  1. 创建一个函数,并读取它的__doc__属性,再检查它的类型.
  2. 通过别的名称实用函数,再把函数作为参数传递.

# 案例1
In [20]: def factorial(n):
    ...:     """return n!"""
    ...:     return 1 if n<2 else n*factorial(n-1)
    ...:

In [21]: factorial(12)
Out[21]: 479001600
# 获取对象属性
In [22]: factorial.__doc__
Out[22]: 'return n!'
# function类
In [23]: type(factorial)
Out[23]: function

# 案例2
In [24]: fact = factorial

In [25]: fact
Out[25]: <function __main__.factorial(n)>

In [26]: fact(5)
Out[26]: 120

In [27]: map(factorial, range(10))
Out[27]: <map at 0x7f9c08954e80>

In [28]: list(map(factorial, range(10)))
Out[28]: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]

上面两个案例,表现出对象的行为.

  • 获取对象属性
  • 查看对象的类
  • 把对象当作参数
  • 对象当作返回值
posted @   码上的生活  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示