Python 函数对象本质上是 function 类的实例。

1 从示例说起

def factorial(n):
'''return n!'''
return 1 if n < 2 else n * factorial(n - 1) r = factorial(42)
logging.info('r -> %s', r)
logging.info('__doc__ -> %s', factorial.__doc__)
logging.info('type(factorial) -> %s', type(factorial))
复制代码

运行结果:

INFO - r -> 1405006117752879898543142606244511569936384000000000
INFO - __doc__ -> return n!
INFO - type(factorial) -> <class 'function'>
复制代码

这个示例首先定义了一个计算斐波那契数列的函数,可以看到 type(factorial) 的返回值是 <class 'function'>。也就验证了函数对象是 function 类的实例。

示例中还使用函数的 __doc__ 属性输出了函数定义中的注释。这一点比 Java 强大,Java 必须把注释定义在注解中才能通过代码获取到。

2 help 函数

python 中还有一个 help 函数,它可以接受一个自定义函数作为入参,然后输出该函数的说明文档。形如:

help(factorial)
复制代码

运行结果:

Help on function factorial in module __main__:

factorial(n)
return n!
复制代码

3 函数别名与函数传参

函数可以赋值给变量,也可以作为其他函数的入参。

f = factorial
logging.info('f -> %s', f)
logging.info('f(5) -> %s', f(5)) r = map(factorial, range(11))
logging.info('r -> %s', r) r = list(map(f, range(11)))
logging.info('r -> %s', r)
复制代码

运行结果:

INFO - f -> <function factorial at 0x0000027278917798>
INFO - f(5) -> 120
INFO - r -> <map object at 0x000002727893F588>
INFO - r -> [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
复制代码

示例中首先把之前定义的斐波那契数列函数赋值给变量 f;可以看到这个变量本身就是 factorial 函数的引用。还可以像使用 factorial 函数一样,直接给 f 函数传参,计算出想要的斐波那契数列结果。

接着把 factorial 函数传入 Python 的 map() 函数。map() 函数的语法为:map(function, iterable, ...),它会以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表2

因为在 Pyhon 3.x 中 map() 函数只返回迭代器,所以示例中对其进行 list 转换。这样就输出了从 0 到 11 作为入参的各自斐波那契结果列表。因为 range() 函数的语法为:range(start, stop[, step]),默认从 0 开始3,所以范围是从 0 到 11。

函数与整数、字符串与字典一样,它们都是 Python 世界中的一等公民。

交流基地:630390733

最新文章

  1. java之多线程 一
  2. js获取浏览器前缀
  3. PHP 检测变量是否为空
  4. C++单元测试 之 gtest -- 组合数计算.
  5. Spring入门(3)-Spring命名空间与Bean作用域
  6. 【技术贴】note8 N5100刷机 双清 落雨
  7. 3 视频里weekend05、06、07的可靠性 + HA原理、分析、机制 + weekend01、02、03、04、05、06、07的分布式集群搭建
  8. python-线程、进程、协程
  9. CSS3 font-face使用
  10. HTML5元素标记释义
  11. Android 图片高级绘图效果---高斯模糊
  12. Windows Azure中国版试用
  13. (5)Java数据结构--有继承图,用途分析
  14. phpcms栏目点击选中
  15. 一个简单的加载动画,js实现
  16. 我的TDD实践---TDD概念篇
  17. AIX上打包排除某些文件/文件夹
  18. pandas绘图总结
  19. antd在线换肤定制功能
  20. tomcat-架构原理

热门文章

  1. PHP 获取本周、今日、本月的起始时间戳
  2. .Net Core官方的 JWT 授权验证
  3. vs2019 Com组件初探-简单的COM编写以及实现跨语言调用
  4. Alpha冲刺-第五次冲刺笔记
  5. charles 常用功能(七)简易接口压力测试(repeat advance 功能)
  6. MongoEngine模块
  7. c++11-17 模板核心知识(十三)—— 名称查找与ADL
  8. Python学习随笔:使用xlwings设置和操作excel多行多列数据以及设置数据字体颜色填充色对齐方式的方法
  9. Android夜神模拟器
  10. Python中错误之 TypeError: object() takes no parameters、TypeError: this constructor takes no arguments