28

在我的 ipython shell 中,我在 os.environ 中看到了一个 setdefault 方法,但没有记录。http://docs.python.org/library/os.html#os.environ。它是否记录在其他地方?

def setdefault(self, key, failobj=None):
    if key not in self:
        self[key] = failobj
    return self[key]

我可以使用这个函数或为这些行编写一个包装器吗?

4

2 回答 2

36

os.environ文档确实声明它是一个映射:

表示字符串环境的映射对象。

因此,它的行为符合标准实现的 python映射文档dict

os.environ因此,它的行为就像标准字典一样,它具有所有相同的方法:

>>> import os
>>> len(os.environ)
36
>>> 'USER' in os.environ
True
>>> os.environ.fromkeys
<bound method classobj.fromkeys of <class os._Environ at 0x107096ce8>>

.setdefault方法与其他映射方法记录在同一页面上,您可以按原样使用它。

于 2012-06-15T09:46:37.480 回答
6

为了澄清——我不得不思考一下这个问题和答案的含义——os.environ 上的 Python.org 文档并没有提及映射类型的所有内置方法(例如 os.environ ,它基本上是一个字典,已经给出了额外的方法)。

相反,他们主要提到了他们为 os 中的对象提供的附加方法,命名为 environ 并从类型 dict 派生,超出了 dict 已经内置的方法。从我的一本关于 Python 的书中,任何字典类型的概要是 dict.setdefault(key, default=None),解释是它类似于 get() 但如果 key 不在 dict 中,它会设置 dict[key]=default。

这里可能没有很好地选择 default 作为名称,因为它很容易与 somevariablename= defaultvalue 混淆,这是在函数声明中声明默认值的常规方式。也就是说,虽然 default=None 肯定设置了一个默认值,但不清楚 setdefault 在任何意义上本质上是如何设置一个默认值的,因为 default 可以被赋予任何值。

于 2013-02-12T20:01:41.763 回答