当前位置: 首页 > 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立方体
  • 大理州工业投资(集团)有限公司党委副书记、副总经理赵云接受审查调查
  • A股午后回暖三大股指涨跌互现:地产银行联袂上攻,两市成交9146亿元
  • 杭州挂牌3宗住宅用地,起始总价约30.04亿元
  • 全球建筑瞭望|与自然共呼吸的溪谷石舍与海边公共空间
  • 人民日报和音:开启中马关系新的“黄金五十年”
  • 恒安集团创始人许连捷逝世,享年73岁