os.environ的类型是什么?为什么不支持viewkeys方法?
如果我打印 os.environ
,输出看起来像一个字典。有些网上的帖子说它是一个基于内存的字典。但它不支持 .viewkeys()
这个方法,系统告诉我:_Environ instance does not support this method
。那么 os.environ
到底是什么类型呢?如果我尝试:
print type(os.environ)
我得到的答案是 instance
。
能不能解释一下 os.environ
的这个行为?
5 个回答
0
os.environ
是一个映射对象。dict
是一种映射对象的类型,而 os.environ
不是一个 dict
。这样说你明白了吗?
4
这是一个 os._Environ
的实例:
>>> os.environ.__class__
<class os._Environ at 0x01DDA928>
它是在Python的库里定义的,文件名是 os.py
。它不能是一个普通的字典,因为更新这个字典的时候,也必须同时更新程序的环境。而且在Windows系统上,查找键的时候需要不区分大小写。
在Python 2.x版本中,它是 UserDict.IterableUserDict
的子类,可能没有新的 viewkeys()
方法。而在Python 3.x版本中,它实现了 MutableMapping
这个抽象基类,但没有其他明确的父类。
5
>>> os.environ.__class__
<class os._Environ at 0xb7865e6c>
这是一个 UserDict.IterableUserDict 的子类。
在 Python 2.7 中,源代码可以在 os.py 文件中找到,Windows 系统的代码在 第 413 行,而 Posix 系统的代码在 第 466 行。关于 Python 3.2 的源代码可以在 这里 找到。