#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(非私信)

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

相关文章
|
10月前
|
存储 IDE 开发工具
【python原理】Python 3里面print为什么改成函数?为什么会有个奇怪的“...”对象?为什么推荐蛇形命名法?等常见问题
【python原理】Python 3里面print为什么改成函数?为什么会有个奇怪的“...”对象?为什么推荐蛇形命名法?等常见问题
108 0
|
7月前
|
Python
Python中多变量赋值
【8月更文挑战第5天】
572 5
|
10月前
|
存储 Java Python
Python 变量?对象?引用?赋值?一个例子解释清楚
Python 变量?对象?引用?赋值?一个例子解释清楚
|
10月前
|
存储 Python
Python学习 -- 类对象从创建到常用函数
Python学习 -- 类对象从创建到常用函数
36 0
#PY小贴士# for 循环定义的变量,循环外可以用吗?
我们知道,在 python 中要获取一个变量的值,必须是先给它赋值过,不然就是未定义。那么这个 i,代码中没有显式的赋值,在循环体之外还可以用吗?
goland 无法导入某些文件的变量、结构体、函数
goland 无法导入某些文件的变量、结构体、函数
|
测试技术 Python
【HttpRunner v3.x】笔记—8.用例引用、变量传递
【HttpRunner v3.x】笔记—8.用例引用、变量传递
【HttpRunner v3.x】笔记—8.用例引用、变量传递
【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数
【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数
【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数
|
C++ 索引 Python
Python面向对象编程之self,类变量和实例变量、__init__一文详解+代码展示
Python面向对象编程之self,类变量和实例变量、__init__一文详解+代码展示
273 0
Python面向对象编程之self,类变量和实例变量、__init__一文详解+代码展示
|
Python
Python 学生信息管理系统------文章中源码100%真实有效-----如何将类、初始化属性、模块、循环判断、静态方法等一系列知识点结合起来做一个项目
Python 学生信息管理系统------文章中源码100%真实有效-----如何将类、初始化属性、模块、循环判断、静态方法等一系列知识点结合起来做一个项目
159 0
Python 学生信息管理系统------文章中源码100%真实有效-----如何将类、初始化属性、模块、循环判断、静态方法等一系列知识点结合起来做一个项目