在编程语言中,有所谓“一等公民(First-Class Citizen)”的说法,用来描述某些实体在语言中的特性和地位。在我看来,所谓一等公民,自然是在程序中能够出现的地方比较多。比如,能够赋值给变量、能够作为函数参数等。
而在Python中,一切皆对象,函数和类也是对象,那么函数和类也是一等公民,在Python中,自然是题中应有之义。
本文打算以函数为例,来说明下函数在Python中也是一等公民,类也是类似的。
一等公民的条件在编程语言中,如果一个实体是一等公民,那么至少应该具有以下条件:1、可以赋值给变量:将该实体赋值给一个变量,从而可以通过该变量来引用它。2、可以作为参数传递:可以将该实体作为参数传递给函数。3、可以作为函数返回值:可以将该实体作为函数的返回值返回。4、可以存储在容器中:可以将该实体作为元素存储在列表、字典等数据结构中。
将函数赋值给变量在Python中,可以将函数赋值给一个变量,从而可以通过该变量来进行函数的调用:
输出结果:
可以看到,函数通过变量调用成功,并且可以看到函数确实是一个对象。
将函数作为参数传递可以将函数对象作为参数传递给其他函数,这种特性在函数式编程中非常常见。比如:
输出结果:
将函数作为返回值返回在Python中,还可以将函数作为另一个函数的返回值,这种特性可以用来构建高阶函数和闭包,这个在后面遇到时,再次展开来说,本文只演示一下:
输出结果:
将函数作为元素存储到容器中函数对象,同其他对象一样,也可以作为元素存储到容器对象中:
定义了四则运算的函数,然后将它们放入字典中,通过字典索引到元素,从而完成四则运算。
总结通过前面的关于函数作为Python中的一等公民的演示,可以看出,在Python中,函数对象如同其他数据类型一样,可以很灵活地应用在各个场景中。类对象作为Python中的对象,也与函数极为类似。在后续的文章中,我们会将函数的基础用法及一些实用的高阶用法,逐步展开。