os.environ的类型是什么?为什么不支持viewkeys方法?

5 投票
5 回答
4669 浏览
提问于 2025-04-17 12:56

如果我打印 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 的源代码可以在 这里 找到。

撰写回答