使用os.environ.setdefault是否安全?

bal*_*lki 22 python dictionary environment-variables python-os

从我的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]
Run Code Online (Sandbox Code Playgroud)

我可以使用此功能或为这些线写一个包装器吗?

Mar*_*ers 27

os.environ文件确实说明这是一个映射:

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

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

os.environ 因此行为与标准dict一样,它具有所有相同的方法:

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

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

  • @hangtwenty:`os.environ.setdefault(key,default)`保证修改字典的方式与`os.environ [key] = os.environ.get(key,default)`will的完全相同.这是因为`os._Environ`类支持该字典[明确确保这一点](https://github.com/python/cpython/blob/e6a4755e6793942b950c1595e0c34bd66a0ee13e/Lib/os.py#L707-L710). (2认同)

Mik*_*nor 5

为了澄清---我不得不考虑一下这个问题和答案意味着什么 - 关于os.environ的Python.org文档并没有提到映射类型的所有内置方法(例如os.environ,它基本上是一个字典,已经给出了其他方法).

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

default可能在这里没有被很好地选为名称,因为它很容易与somevariablename = defaultvalue混淆,后者是在函数声明中声明默认值的常规方法.也就是说,虽然default = None肯定设置了默认值,但不清楚setdefault在任何意义上如何设置默认值,因为默认值可以给出任何值.