zoukankan      html  css  js  c++  java
  • Python __builtin__模块

    你有没有好奇过当我们打开Python后就可以直接使用str(),list(),eval(),print(),max()这样的函数,而不用导入任何模块?

    其实原因很简单,就是当我们打开Python解释器之后,它会自动导入一些模块,所以我们就可以直接使用很多函数,它们有一个名字,叫内建函数。

    我们可以利用dir()来查看被自动导入的模块都有哪些,我们在一个空文件里打印dir():

    里面有一个叫__builtins__的模块:

    会看到我们熟悉的内建函数的名称,如list、dict、str等,当然还有一些异常和其它属性。

    打印__builtins__,会发现__builtins__其实是引用了__builtin__模块而已,这说明真正的模块是__builtin__

    __builtins__与__builtin__的深入区别:

    他们俩的深入区别主要要看是否是在主模块下进行的操作

    1、如果是在主模块下进行操作,那两者就没有区别

    2、如果不是在主模块中进行操作,__builtins__就是对__builtin__.__dict__的一个引用

      先创建一个test.py模块,后面我们需要在Python交互器中导入它,那么这时候对于test模块来说,它就不是主模块了。如下:

      test.py

    import __builtin__
    
    print 'Module name:', __name__
    
    print '*==test __builtin__ and __builtins__==*'
    print '__builtin__ == __builtins__', __builtin__ == __builtins__
    print '__builtin__ is __builtins__', __builtin__ is __builtins__
    print 'id(__builtin__)', id(__builtin__)
    print 'id(__builtins__)', id(__builtins__)
    
    print '=' * 50
    
    print '*==test __builtin__.__dict__ and __builtins__==*'
    print '__builtin__.__dict__ == __builtins__', __builtin__.__dict__ == __builtins__
    print '__builtin__.__dict__ is __builtins__', __builtin__.__dict__ is __builtins__
    print 'id(__builtin__)', id(__builtin__.__dict__)
    print 'id(__builtins__)', id(__builtins__)

      

       从输出的结果可以看出__builtins__就是对__builtin__.__dict__的引用。

  • 相关阅读:
    条件类的设计
    条件对象的设计
    又是一个星期天,明天又要开始一周的工作了,想想上周的工作情况,不怎么理想。
    自动设置的类,版本2,在设计上比前一个版本有进步。
    最近写了一个自动保存设置的类。
    关于异常信息"未找到成员"
    表达式类的设计
    IExtenderProvider 接口的应用.实现自定义组件LilyValidateProvider
    IIS404的问题
    程序开发[对象的旅行]
  • 原文地址:https://www.cnblogs.com/value-code/p/9224820.html
Copyright © 2011-2022 走看看