method和function(学编程这么久,还傻傻分不清什么是 *** (met
函数的定义被编程了这么久,但我还是能 我分不清什么是 ,什么是函数。
优质文章,之一时间送达!
作者猫下的豌豆花
出发地蟒蛇猫
链接https://mp.weixin.qq.com/s/e6rIc-dPhbqWAeJvekawwQ
编程语言中有两个基本概念,即 和函数。如果你已经达到了编程的初级/入门水平,那么你的脑海中一定已经有了一个初步的答案。
也许你心里已经有答案了。
除了参数、返回值和匿名函数等正确的形式内容之外,你可能会说 函数定义在类的外部,而 定义在类的内部并绑定到类 。
这种说法有问题吗?有!否则,我不会 我没有专门写过这篇文章。本文将主要澄清这个问题。
在标准的库检查中,它提供了两个内省函数,即i ethod和isfunction,可以用来判断什么是 ,什么是函数。
所以本文想先研究这两个函数,看看Python是如何处理 /函数概念的。
关于它们的用法,让 让我们看一个简单的例子
运行的结果是 真实 和 虚假 分别表示我们定义的测试是一个函数,而不是一个 。
这两个函数也可以用来自测,验证它们都是函数并不困难
那么,下一个问题是inspect 库的两个函数是什么工作原理呢?.
让 让我们看看inspect中的实现代码
在源代码中,我们看到isinstance函数,主要用来判断一个对象是否是一个类的实例。
我们也看到了类型。函数类型和类型。MethodType,引用目标类。继续点击查看源代码
#摘自类型。pydef _ f : passfunctiontype=type(_ f)class _ c : def _m(self): pas ethodtype=type(_ c . _ m)这里只定义了两个empty _ f和_ m,然后使用内置的类型函数。所以,我们可以把它们挑出来,看看庐山的本来面
梳理它们的关系,我们可以得到
经过简化,我们发现最关键的问题有两个type 函数如何判断出一个对象是 function 或 method 类?instance 函数如何判断出一个对象是某个类的实例?.
这两个内置函数都是用C语言实现的,所以I 我不打算在这里深究它们.
,让我们 让我们回头看看inspect中的评论,我们会注意到一些线索
Isfunction判断用户定义的函数(user-defined function),有__doc__,__name__,等等。
I ethod判断实例 (instance method),具有函数的一些性质,最特别的是它具有__self__性质。
笔记更有用,从中我们可以得出以下推论
1.非用户定义的函数,即内置函数,不是 函数类型 在isfunction的眼里!
让 验证镜头、方向和范围
实际上,它们有自己的类别(BuiltinFunctionType,BuiltinMethodType):
特别需要注意的是,内置函数都是builtin_function_or_method类型,range、type、list等。看起来像函数,但它们不是
2.类的静态 在i ethod眼里不是MethodType!
创建类的实例后,查看
可以看出,除了clas ethod,只有类实例的实例 才会被i ethod判断为真!静态 ,不管是绑定到类还是实例,都不是 与技巧。!
有没有觉得不可思议(或者有点迷茫)?
好了,回到本文开头的问题,让 让我们一下。
若以 inspect 库的两个函数为判断依据,则 Python 中的“ 与函数”具有一定的狭义性。在判断什么是函数时,它们并不把内置函数计算在内。,在判断什么是 时,并非定义在类内部的都算,而是只有类 及绑定了实例的实例 才算是“ ”。
也许你会说inspect的两个判断函数不可信,内置函数也应该算是 功能和功能。类中的所有 都应该被视为 与技巧。。
我承认这种说法在广义上是可以接受的。毕竟,我们一直呼吁的是 XX函数 和 XX 。
但理论和广义概念只是为了方便人们交流和理解,代码实现才是本质区别。换句话说,当Python实际区分 和功能 ,不是文章开头简单的陈述,还有更多细节值得关注。
回复下面的「关键词」获取优质资源。
回复关键字 pybook03并且马上拿到首页君和他的朋友翻译的《Think Python 2e》的电子版。
回复关键字 入门资料并立即获得首页君整理的10本Python入门书的电子版。
回复关键字 m并立即获得Python精选的高质量文章的 。
回复关键词「」,将数字替换成 0 及以上数字,有惊喜好礼哦~
pexels,CC0授权。
method 的返回式编程函数的三种用法