2012-02-13 69 views
4

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

print type(os.environ) 

我得到instance作为答案。

请您澄清os.environ的相似的风格?

+1

Python版本您使用的? 2.7中的'viewkeys()'方法是新的:http://docs.python.org/dev/whatsnew/2.7.html?highlight=viewkeys#pep-3106-dictionary-views – 2012-02-13 09:33:18

+0

我在Windows 7上使用Python 2.7 – Sumod 2012-02-13 12:11:44

回答

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的源码。

4

这是一个os._Environ实例:

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

它在Python的库中定义,文件os.py而不能是普通的字典,因为更新词典还必须更新进程的环境。此外,Windows上的关键查找需要不区分大小写。

在Python 2.x中,它的子类UserDict.IterableUserDict大概没有新的viewkeys()方法。在Python 3.x中,它实现了abc的MutableMapping,但没有其他显式的基类。

+0

+1“不能是简单的字典,因为更新字典也必须更新进程的环境” – 2015-10-01 22:01:10

0

os.environ是一个映射对象。 dict是一种映射对象& os.environ不是dict。说得通?

0

os.environ是在一个类的实例,

尝试:

os.environ.__dict__ 

它会给你一切的属性..

相关问题