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

时间:2012-02-13 09:28:29

标签: python

如果我打印os.environ,输出看起来像字典。我在网上看到的一些帖子说它是一个基于记忆的字典。 但它不支持.viewkeys()方法并告诉我:_Environ instance does not support this method。那么os.environ的确切类型是什么。如果我尝试:

print type(os.environ)

我得到instance作为答案。

请澄清os.environ的这种行为吗?

5 个答案:

答案 0 :(得分:5)

>>> os.environ.__class__
<class os._Environ at 0xb7865e6c>

它是UserDict.IterableUserDict的子类。

在python 2.7中,可以在line 413(Windows)和line 466(Posix)的os.py中找到源代码。 Here是python 3.2源代码。

答案 1 :(得分: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 abc但没有其他显式基类。

答案 2 :(得分:0)

os.environ是一个映射对象。 dict是一种映射对象&amp; os.environ不是dict。有意义吗?

答案 3 :(得分:0)

os.environ是一个类的实例,

尝试:

os.environ.__dict__

它会给你所有的属性..

答案 4 :(得分:0)

要对其进行迭代,请首先将其转换为字典:

environment_items = dict(**os.environ)

for env_key in environment_items:
    print(env_key, environment_items[env_key])