你有没有好奇过当我们打开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__的引用。

最新文章

  1. [汇编与C语言关系]1.函数调用
  2. Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute'
  3. JS学习(二)
  4. ADF_Starting系列8_使用EJB/JPA/JSF通过ADF构建Web应用程序之扩展UI Method
  5. smartjs - DataManager API
  6. HTTP协议报文、工作原理及Java中的HTTP通信技术详解
  7. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记2
  8. windows服务器下IIS7 安装URL Rewrite(URL重写)模块
  9. ArcGIS中实现指定面积蜂窝(正六边形)方法
  10. 《R语言入门与实践》第七章:程序
  11. BZOJ3156 防御准备 动态规划 斜率优化
  12. 自动化中app支持schema跳转
  13. TensorFlow中的优化算法
  14. shell字符串基本操作
  15. 使用Python+opencv2时的文件命名及路径问题
  16. cocos2d-js 写日志log 查看日志log Android调试查看log
  17. css3 实现圆角边框的border-radius属性和实现阴影效果的box-shadow属性
  18. phpcms 列表页中调用其下的所有子栏目(或特定的子栏目)的方法
  19. linux部署MantisBT(二)部署php
  20. __name__ = '__main__'有什么用

热门文章

  1. ArrayList反转
  2. [转]Node.JS package.json 字段全解析
  3. Oracle 11g 、 Oracle 11g select 、 PLSQL 、 Sql Server迁移助手(SSMA)6.0/7.1 网盘下载地址
  4. Ocelot(三)- 服务发现
  5. List<T>的排序
  6. 为什么要把系统拆分成分布式的,为啥要用Dubbo?
  7. Jupyter导出PDF从入门到绝望(已解决)
  8. EIGRP-5-EIGRP数据包格式
  9. css奇技淫巧—box-shadow与outline绘制多重边框效果
  10. .gitkeep--git提交空目录的解决方法