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

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

之前我们提到过:有同学在写入文件之后发现文件内容并没有改动,有可能是因为在关闭文件时写成了 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 知识点、开发小技巧、学习中的常见问题等。篇幅短小,适合碎片时间阅读,欢迎关注!

本栏目接受投稿,采纳后将署名发表,可附个人博客、公众号、Github等。


如果你在编程学习中有疑问,可通过以下方式向我们提问:

1. 加入码上行动答疑群(最及时响应)

2. 加入知识星球 https://t.zsxq.com/IiAiiQj

3. 发微博加上 #编程教室# @Crossin(非私信)

提问时请表述清楚,附上必要代码、输出等截屏。

相关文章
|
2月前
|
开发者 Python
|
5月前
|
存储 IDE 开发工具
【python原理】Python 3里面print为什么改成函数?为什么会有个奇怪的“...”对象?为什么推荐蛇形命名法?等常见问题
【python原理】Python 3里面print为什么改成函数?为什么会有个奇怪的“...”对象?为什么推荐蛇形命名法?等常见问题
51 0
|
2月前
|
算法 开发者 Python
【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
21 0
|
3月前
|
存储 Python
解释Python中的函数参数传递机制是什么样的?
解释Python中的函数参数传递机制是什么样的?
|
12月前
|
Python
一日一技:Python如何动态替换对象的方法?
一日一技:Python如何动态替换对象的方法?
123 0
|
Python
Python 获取被调用函数名称,所处模块,被调用代码行
Python 获取被调用函数名称,所处模块,被调用代码行
85 0
|
Python
Python def定义函数并进行序列解包源码操作解析
Python def定义函数并进行序列解包源码操作解析
69 0
|
Python 容器
|
数据管理 测试技术 API
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
在进行软件接口测试或设计自动化测试框架时,一个不比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xlrd、xlwt开源包来读写excel。例如:当我们登录的账号有多个的时候,我们一般用 excel 存放测试数据,本篇文章介绍,python 读取excel 方法,并保存为字典格式。
326 0
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
|
测试技术 Python
【HttpRunner v3.x】笔记—8.用例引用、变量传递
【HttpRunner v3.x】笔记—8.用例引用、变量传递
【HttpRunner v3.x】笔记—8.用例引用、变量传递