python__builtin__.py 源代码,内建类 dict 的__init__和其他方法都是 pass,那这 dict 到底咋实现的?有鬼了? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lsj8924

python__builtin__.py 源代码,内建类 dict 的__init__和其他方法都是 pass,那这 dict 到底咋实现的?有鬼了?

  •  
  •   lsj8924 2018 年 10 月 4 日 4876 次点击
    这是一个创建于 2759 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图,这是 python 内建的类的原代码,一堆 pass,那 dict 的功能靠 pass 实现的?这代码也太魔幻了吧。

    neoblackcap
        1
    neoblackcap  
       2018 年 10 月 4 日
    dict 是通过 C 语言实现的,据我理解,__built__.py 只是一个 stub 而已
    chengluyu
        2
    chengluyu  
       2018 年 10 月 4 日
    都说了是 built-in 了……
    innoink
        3
    innoink  
       2018 年 10 月 4 日 via Android
    这个是编辑器生成的假文件
    lsj8924
        4
    lsj8924  
    OP
       2018 年 10 月 4 日
    @chengluyu built-in 官方解释是可以随时调用的,没说咋指的是实现方式吧。
    voidcomma
        5
    voidcomma  
       2018 年 10 月 4 日
    这些方法可能是它的抽象基类的抽象方法,必须实现的,然后这里继承了但是不提供实现细节,你可以自己继承实现。我猜的。。
    wwqgtxx
        6
    wwqgtxx  
       2018 年 10 月 4 日 via iPhone
    @lsj8924 问题是你这个__builtin__.py 只是 pycharm 自带的,并不是 python 自带的,cpython 解析器的文件库中从来就没这个文件
    lsj8924
        7
    lsj8924  
    OP
       2018 年 10 月 4 日   1
    @wwqgtxx 还是老哥稳啊。居然知道是 pycharm。我看了看路径,你是对的,确实是生成的临时文件。
    https://stackoverflow.com/questions/24266114/pycharm-what-is-python-stubs 说的比较清楚。
    wwqgtxx
        8
    wwqgtxx  
       2018 年 10 月 4 日 via iPhone
    @lsj8924 其实文件的开头写了,大概意思就是这个文件是生成的
    chengluyu
        9
    chengluyu  
       2018 年 10 月 4 日
    @lsj8924

    built-in 的意思就是内建实现,实现细节不会暴露给你,比如 gcc 的一系列 built-in functions。

    CPython 的 dict 也确实是在解释器层面实现的,你可以从 CPython 的源码中翻出来 dict 的 C 实现,但是绝对不会看到 Python 写的 dict 实现。
    PythonAnswer
        10
    PythonAnswer  
       2018 年 10 月 4 日
    stub 帮助你跳转进去看看结构的. 这个东西想看细节, 只能看源码+文档.
    lance6716
        11
    lance6716  
       2018 年 10 月 4 日 via Android
    ysc3839
        12
    ysc3839  
       2018 年 10 月 4 日 via Android
    想顺便问一个问题,我自己用 C++ 写了个 Python 的模块,写代码的时候会提示找不到这个模块,有没有办法像这里的 __builtin__.py 一样自己写个声明?
    neoblackcap
        14
    neoblackcap  
       2018 年 10 月 4 日 via iPhone   1
    @ysc3839 假如是 3.5 以后的扩展,你可以试试写一个 pyi 文件
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2930 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 11:03 PVG 19:03 LAX 04:03 JFK 07:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86