+关注
已关注

分类  

标签  

日期归档  

2019-05(1)

2019-06(2)

2019-07(4)

2019-08(110)

2019-09(102)

2019-10(6)

2019-11(5)

python中的一等对象--函数

发布于2019-08-07 18:23     阅读(31)     评论(0)     点赞(4)     收藏(4)


一等对象

什么是一等对象:

  • 在运行时创建

  • 能赋值给变量或数据结构中的元素

  • 能作为参数传递给函数

  • 能作为函数的返回结果

python中的字符串,列表什么的都是一等对象,但对如果之前只是使用c++、java语言的人们来说python中的函数也是一等对象,那一定会有一点不可思议

接下来就介绍一下这个一等对象—函数

函数是一等对象

我们就马上证明一下函数是一等对象:


def func():
    print('一等对象函数')

print(type(func)) #<class 'function'>

将上面定义的函数func的type打印出来为<class 'function'="">,可见函数func是类function的实例,也就是func是一个对象,对象肯定是在运行时创建的了。

接下来:


obj = func
obj() # 一等对象函数

把func赋给obj,在obj后加括号执行,输出“一等对象函数”,可见函数是可以赋值给变量的


def func():
    print('一等对象函数')

def func2(n):
    print(n)
    return n

print(func)
func2(func)()
"""
<function func at 0x0000021FED3EC268>
<function func at 0x0000021FED3EC268>
一等对象函数
"""

上面这段代码同样证实了函数可以作为参数传递给函数,同时返回值依然可以是函数,也可以向下面这样


def func():
    print('一等对象函数')

def func2(n):
    print(n)
    def func3():
        print('函数作为返回值')
    return func3

print(func)
func2(func)()
"""
<function func at 0x0000021FED3EC268>
<function func at 0x0000021FED3EC268>
函数作为返回值
"""

在函数中定义函数并返回

高阶函数

函数作为一等对象的使用在python中其实很常见,举个例子,内置函数sorted()


fruits = ['strawberry','apple','cherry','banana',' pineapple']
list = sorted(fruits,key=len)
print(list)
# ['apple', 'cherry', 'banana', 'strawberry', ' pineapple']

这种把函数作为参数或者返回值为函数的函数就叫做高阶函数,显然sorted()就是高阶函数,这种高阶函数在python中还有很多很多。

匿名函数

说道刚才用到的sorted()函数,经常和他一起配合使用的就是匿名函数了

匿名函数顾名思义就是没有名字,它通过lambda关键字创建,即建即用,节省了创建函数的时间,也叫做lambda表达式


fruits = ['strawberry','apple','cherry','banana',' pineapple']
list = sorted(fruits,key=lambda x:x[-1])
print(list)
# ['banana', 'apple', ' pineapple', 'strawberry', 'cherry']

上面的sorted()函数按照水果最后一位字符的顺序排序,这里并没有什么实际意义,只是使用lambda表达式的一个举例。

可调用对象

函数是对象,函数名加括号便是调用这个函数,那么其他对象能否也变成像函数一样可以加括号调用呢

这是可以的,只需要在类中实现特殊方法call


class Fruit():
    def __init__(self,name):
        self.name = name

    def __call__(self, *args, **kwargs):
        print(self.name+' was called')

apple = Fruit('apple')
apple() # apple was called

call方法还可以添加任意的参数,和函数一样。

对于一个对象可不可以被调用可以通过callable()函数判断


print(callable(apple)) # True
print(callable(Fruit)) # True

能够调用就会返回True。这里我们发现Fruit同样也可以调用,这是因为类同样也是一个对象,Fruit也是一个实例,创造它的类也实现了call方法,这里就不细说了。


参考《流畅的Python》



所属网站分类: 技术文章 > python文章

作者:smile

链接: http://www.pythonheidong.com/blog/article/12061/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  为什么不返回`none'而不是tkinter.Entry对象?

  结合python flask和express.js

  带有多个应用程序的Django静态文件

  递归grep使用python

  将16位整数转换为32位浮点

  使用PIL和win32clipboard将图像写入python中的Windows剪贴板吗?

  更改每个视图的数据库并访问每个视图的多个数据库

  有任何适用于Python的pdf417条形码库吗?

  当它永远不会被实例化时,在python中创建一个类有意义吗?

  如何停止将回车符添加到Python的文件输出中?

优质资源排行榜

 python经典电子书大合集下载 下载次数 8117

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7548

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7442

 零基础大数据全套视频400G 下载次数 7005

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6893

 零基础软件测试全套系统教程 下载次数 6503

 全套人工智能视频+pdf 下载次数 6440

 IOS全套视频教程 基础班+就业班 下载次数 4680

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3216

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3102

11  Python深度学习 pdf下载 下载次数 3070

12  python项目开发视频 下载次数 3001

13  python从入门到精通视频(全60集)python视频教程下载 下载次数 2999

14  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 2998

15  黑马2017年java就业班全套视频教程 下载次数 2992

16  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

17  利用python实现程序内存监控脚本 下载次数 2987

18  树莓派Python编程指南 pdf下载 下载次数 2985

19  老男孩python自动化视频 下载次数 2980

20  老王python基础+进阶+项目视频教程 下载次数 2973

21  尚硅谷Go学科全套视频 下载次数 2972

22  Python基础教程 pdf下载 下载次数 2971

23  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2968

24  Web前端实战精品课程 下载次数 2967

25  [小甲鱼]零基础入门学习Python 下载次数 2962

26  tron python小游戏 下载次数 2962

27  老男孩python全栈开发15期 下载次数 2958

28  2017最新web前端开发完整视频教程附源码 下载次数 2948

29  笨办法学python pdf下载 下载次数 2937

30  最新全套完整JAVAWEB2018开发视频 下载次数 2926

31  Python算法教程_中文版 pdf下载 下载次数 2925

32  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 2920

33  Spring boot实战视频6套下载 下载次数 2909

34  python全套视频十五期(116G) 下载次数 2904

35  Python项目实战 下载次数 2885

36  python全自动抢火车票教程-python视频教程下载 下载次数 2883

37  30个小时搞定Python网络爬虫 含源码 下载次数 2882

38  尚硅谷大数据之Hadoop视频 下载次数 2876

39  简明python教程 (A Byte of Python)pdf下载 下载次数 2875

40  Python高性能编程 pdf下载 下载次数 2870

41  Python A~B~C~ python视频教程下载 下载次数 2865

42  利用Python进行数据分析 pdf下载 下载次数 2863

43  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2863

44  web小程序表白天数倒计时源码下载 下载次数 2862

45  python基础视频教程 下载次数 2862

46  go语言全套视频 下载次数 2854

47  流畅的Python PDF下载高清完整扫描原版 下载次数 2850

48  清华学霸尹成Python爬虫视频-ok 下载次数 2846

49  黑马前端36期最全视频和代码 下载次数 2842

50  2018最新全套web前端视频教程+源码下载 下载次数 2841