如果我打印os.environ
,输出看起来像字典。我在网上看到的一些帖子说它是一个基于记忆的字典。
但它不支持.viewkeys()
方法并告诉我:_Environ instance does not support this method
。那么os.environ
的确切类型是什么。如果我尝试:
print type(os.environ)
我得到instance
作为答案。
请澄清os.environ
的这种行为吗?
答案 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])