002_b、Python部分源码中方法只有pass占位符解释

资料参考:https://blog.csdn.net/qq_35097289/article/details/104396210

 

Python定义函数,必须有函数体,否则编译就会报错。函数体用一句pass占位是防止报错,并且不会有任何动作。这种只有pass的函数一般有以下几种可能:

1、父类中声明函数,但不声明实现,由继承的子类进行实现,也就是说这就是一个空方法;

2、这个函数的具体实现不用Python编写,而是由例如C这种高效语法编写,在包中只用一个空方法占位,调用的时候是调用C语言实现的方法。Python中有一些需要大量运算的内置函数是用C或者C++写的。 

比如说这里:

def next(iterator, default=None): # real signature unknown; restored from __doc__
    """
    next(iterator[, default])
    
    Return the next item from the iterator. If default is given and the iterator
    is exhausted, it is returned instead of raising StopIteration.
    """
    pass

底层是用c语言实现的,这里定义的函数只是类似于一个接口和使用说明的东东(只是告诉你怎么用,如果想看c源码)

 

你看到的是pass,但实际并非如此。

Python内置函数的实现,就涉及到Python本身的实现方式了,也就是这个解释器是怎么实现的。

Python的解释器有c java python等多种实现,一般情况下只要不搞些奇怪的操作,c语言实现的CPython就能满足几乎所有要求,这也是官方提供的默认实现。

因此就假设使用的是CPython,那么作为解释器标准实现的一部分,那些个内置函数也是用c语言实现的,也就是说,正常情况下你是连pass也看不到的。

PyCharm这个IDE做了一些厉害的事情,他会维护一个对当前解释器中所有函数 类型等东西的索引,这样就可以进行定义跳转一类的操作了。但是对内置函数来说,找不到对应的实现,只有文档 pydoc 可用,于是PyCharm就根据文档自动地生成这些函数的签名,也就是内容为pass的函数。

这些函数的具体实现需要到python的源代码中找,可以参考官方文档extending python with c(差不多是这个名字),看看c写的东西是怎么被python使用的。

 

posted @ 2021-07-24 23:51  空-山-新-雨  阅读(256)  评论(0编辑  收藏  举报