Python 的内建对象
2015-06-26 17:16
603 查看
如果你已经学习了包,模块这些知识了。
你会不会有好奇:Python为什么可以直接使用一些内建函数,不用显式的导入它们,比如
原因是Python解释器第一次启动的时候
进Shell看看:
你可以再次导入
这时候多了一个
现在我们把它从一个文件导入:
在主模块中,即没有被其他文件导入。
通过
在非
Note:Python3.X版本中,内建模块更名为builtins,与Python2.X有所不同
__builtin__ 与 __builtins__ 的区别与关系
What’s the deal with __builtins__ vs __builtin__
你会不会有好奇:Python为什么可以直接使用一些内建函数,不用显式的导入它们,比如
str() int() dir()…?
原因是Python解释器第一次启动的时候
__builtins__就已经在命名空间了(Note: 有s)
进Shell看看:
>>> globals() {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
你可以再次导入
__builtin__(Note: 没有s):
import __builtin__ >>> globals() {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__builtin__': <module '__builtin__' (built-in)>, '__package__': None}
这时候多了一个
__builtin__对象,你可以判断它们是不是相同的:
>>> __builtin__ is __builtins__ True >>> type(__builtin__) <type 'module'> >>> type(__builtins__) <type 'module'>
现在我们把它从一个文件导入:
# file1.py import __builtin__ print "module name __name__ : ", __name__ print "__builtin__ is __builtins__: ", __builtin__ is __builtins__ print "type(__builtin__): ", type(__builtin__) print "type(__builtins__): ", type(__builtins__) print "__builtins__ is __builtin__.__dict__", __builtins__ is __builtin__.__dict__ # file2.py import file1 """结果: module name __name__ : file __builtin__ is __builtins__: False type(__builtin__): <type 'module'> type(__builtins__): <type 'dict'> __builtins__ is __builtin__.__dict__ True """
结论:
__builtins__是对内建模块
__builtin__的引用,并且有如下两个方面差异:
在主模块中,即没有被其他文件导入。
__builtins__是对
__builtin__本身的引用,两者是相同的。
通过
__builtins__ is __builtin__.__dict__猜想:
在非
'__main__'模块中,也就是模块被导入后,
__builtins__应该属于
__builtin__.__dict__的一部分,是对
__builtin__.__dict__的引用,而非__builtin__本身,它在任何地方都可见。
装饰内建函数
Python 官方文档 解释了如何装饰一个内建函数:import __builtin__ def open(path): f = __builtin__.open(path, 'r') return UpperCaser(f) class UpperCaser: __metaclass__ = type def __init__(self, f): self._f = f def read(self): return self._f.read().upper() print open('./a.txt').read() # 将会全部转为大写输出
Note:Python3.X版本中,内建模块更名为builtins,与Python2.X有所不同
参考:
Python所有内建函数__builtin__ 与 __builtins__ 的区别与关系
What’s the deal with __builtins__ vs __builtin__
相关文章推荐
- Python中print/format字符串格式化实例
- 老鸟的Python入门教程
- Python 学习指南
- Python中用于计算对数的log()方法
- 20150610-Python面试
- MIT Python 第四课函数抽象与递归简介 函数调用与原代码的区别
- python获取当前脚本下的所有方法
- python basic note
- 【python】 开始第一个项目
- python字符串/元组/列表/字典互转
- Python核心编程笔记--unicode编码
- 什么是 WSGI -- Python 中的 “CGI” 接口简介
- Python Django开发 1
- syntax error near unexpected token ?怎么解决
- Python 学习笔记
- python操作数据库
- python decorator simple example
- 在Python中使用zlib模块进行数据压缩的教程
- Java VS Python 应该先学哪个?
- 对比java和python对比