当前位置: 首页 > news >正文

Python 一等函数( 把函数视作对象)

把函数视作对象

示例 5-1 中的控制台会话表明,Python 函数是对象。这里我们创建了一
个函数,然后调用它,读取它的 doc 属性,并且确定函数对象本
身是 function 类的实例。

示例 5-1 创建并测试一个函数,然后读取它的 doc 属性,再
检查它的类型

>>> def factorial(n): ➊
... '''returns n!'''
... return 1 if n < 2 else n * factorial(n-1)
...
>>> factorial(42)
1405006117752879898543142606244511569936384000000000
>>> factorial.__doc__ ➋
'returns n!'
>>> type(factorial) ➌
<class 'function'>

➊ 这是一个控制台会话,因此我们是在“运行时”创建一个函数。
doc 是函数对象众多属性中的一个。
➌ factorial 是 function 类的实例。
doc 属性用于生成对象的帮助文本。在 Python 交互式控制台
中,help(factorial) 命令输出的内容如图 5-1 所示。

图 5-1:factorial 函数的帮助界面;输出的文本来自函数对象的
doc 属性

示例 5-2 展示了函数对象的“一等”本性。我们可以把 factorial 函数赋
值给变量 fact,然后通过变量名调用。我们还能把它作为参数传给
map 函数。map 函数返回一个可迭代对象,里面的元素是把第一个参数
(一个函数)应用到第二个参数(一个可迭代对象,这里是
range(11))中各个元素上得到的结果。

示例 5-2 通过别的名称使用函数,再把函数作为参数传递

>>> fact = factorial
>>> fact
<function factorial at 0x...>
>>> fact(5)
120
>>> map(factorial, range(11))
<map object at 0x...>
>>> list(map(fact, range(11)))
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

有了一等函数,就可以使用函数式风格编程。函数式编程的特点之一是
使用高阶函数——这是下一节的话题。

相关文章:

  • AtCoder ABC402 A~D 题解
  • 五分钟学会如何基本使用JJWT!!!
  • Linux系统编程 day6 进程间通信mmap
  • 借助LlamaIndex实现简单Agent
  • Day2—3:前端项目uniapp壁纸实战
  • 深入理解 MCP 协议:开启 AI 交互新时代
  • 【人工智能】再谈探索AI幻觉及其解决方案(进一步整理)
  • 信创开发:开启信息自主创新、国产替代新时代
  • [Java微服务组件]注册中心P3-Nacos中的设计模式1-观察者模式
  • mysql控制单表数据存储及单实例表创建
  • 生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)
  • 【进程信号】五、信号集操作接口详解
  • SICAR标准功能块 FB1514 “Robot_request_FB”
  • 增量式PID基础解析与代码实例:温控系统
  • 有效的完全平方数--LeetCode
  • HFSS3(limy)——建模学习记录
  • 工业级MIFI解决方案:打造低时延、高可靠性的Wi-Fi网络快速部署体系!
  • 【专刷】滑动窗口(一)
  • 字符串系列一>二进制求和
  • HTML5+CSS3小实例:CSS立方体
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 首开股份:一季度净利润亏损约10.79亿元,签约金额63.9亿元
  • 释新闻|西葡大停电为何规模大、恢复慢?可再生能源是罪魁祸首?
  • 专访|首夺天元头衔创生涯历史,王星昊打算一步一步慢慢来
  • 美加征“对等关税”后,调研显示近半外贸企业将减少对美业务
  • 国家发改委答澎湃:将建立和实施育儿补贴制度,深入实施提振消费专项行动