2019.5.2_初次见面,请多指教!_一等函数

253 阅读3分钟

大二码农,最近身心俱疲,心力交瘁,不过刚刚了却了一件心事,也算值了,五一哪有时间出去浪?家里学校事情一堆,浪什么浪,给老子老老实实在实验室自习室学习!!

感谢掘金给我一个记日记的地方,我会珍惜!这里是我记日记的地方,写小说的地方,也是提升自己的地方,欢迎各位来此赐教!

今儿忙里偷闲,留下新看的玩意儿!

对了,忘记说了,我是一枚PythonLinux程序员,欢迎大家来交流!

分享自《流畅的Python》


一等函数

Python中函数是一等对象。编程理论家吧"一等函数"定义为满足下面条件的程序实体:

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

在Python中,整数、字符串和字典都是一等对象——没有什么特别之处。如果在Python之前,你是用的语言并未把函数当做一等公民,那么本章以及以下三部分余下的内容将重点讨论把函数作为对象的影响和实际应用。

人们常将“把函数视为一等对象”简称为“一等函数”。这样说并不完美,似乎表明这是函数中的特殊群体。在Python中,所有函数都是一等对象。

把函数视作对象

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

>>> def factorial(n):                     # 这是一个控制台会话,因此在“运行时”创建一个函数
... 	'''return n!'''
... 	return 1 if n<2 else n * factorial(n-1) 
...
>>> factorial(42)
1405006117752879898543142606244511569936384000000000
>>> factorial.__doc__                     # __doc__是函数众多属性中的一个
'return n!'
>>> type(factorial)                       # factorial是function类的实例
<class 'function'>

__doc__属性用于生成对象的帮助文本。在Python交互式控制台中,help(factorial)命令输出的内容如下图:

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

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

有了一等函数,就可以使用函数式风格编程。函数式编程的特点之一就是高阶函数——明儿的日记!


虽说这些都很简单,大家都懂,但是我决定好好总结一下,顺便练练打字速度! 大家晚安!