前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >#PY小贴士# 函数也是对象

#PY小贴士# 函数也是对象

作者头像
Crossin先生
发布2020-02-14 14:18:04
4000
发布2020-02-14 14:18:04
举报

之前我们提到过:有同学在写入文件之后发现文件内容并没有改动,有可能是因为在关闭文件时写成了 f.close,没就加括号。那么为什么不加括号就不行,而且程序也没有报错提示呢?

这就要提到 Python 中的一个重要概念:万物皆对象。除了我们熟知的数字、字符、列表、字典是对象外,函数、模块,甚至类型本身,也是对象,只不过在功能和表现上会有所不同。

以我们熟知的 print 函数为例,你可以把 print 函数本身作为输出的对象:

从输出中可以看出,它告诉你这是一个内置方法(built-in function),但作为参数的这个 print 就并没有触发它的函数效果,因为它没有加括号,也就是说,函数没有被调用

如果加了括号呢?

print() 本身输出了一个空行,而它没有返回值,所以传递给外面 print 的是 None。结果就是一个空行(来自里面的 print())和一个 None(来自外面的 print(None))。

因此,当函数不加括号时,它就和你在代码中写个 123、'Hello' 一样,只是一个值,并不触发函数的执行效果。加了括号,函数执行,产生效果,并获得函数的返回值。

更进一步:既然函数是对象,那么它也可以赋值给其他变量:

当 fn 赋值给变量 gn 后,gn 也就相当于是 fn 的一个别名,它和 fn 指向同一个对象,并且可以像正常定义的函数一样通过加上括号来调用

反过来,定义好的函数名也可以被赋值为其他的对象:

被赋值成其它类型后的函数名也就无法再继续调用原函数了。


#PY小贴士# 里,我们会分享 python 知识点、开发小技巧、学习中的常见问题等。篇幅短小,适合碎片时间阅读,欢迎关注!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档