2012-06-15 30 views
13

Z mojej powłoki ipython widzę metodę setdefault w os.environ, ale nie jest ona udokumentowana. http://docs.python.org/library/os.html#os.environ. Czy jest to udokumentowane gdzie indziej?Czy można bezpiecznie używać os.environ.setdefault?

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

Czy mogę użyć tej funkcji lub napisać opakowanie dla tych linii?

+0

Istnieje podobna metoda "dict.setdefault" o tej samej funkcjonalności. – eumiro

Odpowiedz

16

os.environ documentation podaje, że to mapowanie:

Obiekt mapowanie reprezentujący środowisko ciąg.

Jako taki zachowuje się zgodnie z pytonem mapping documentation, którego standardową implementacją jest dict.

os.environ nich zachowuje się jak standardowy dict, ma wszystkie te same metody:

>>> 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 method jest udokumentowana na tej samej stronie co reszta metod kartograficznych, i można go używać tylko grzywna jak jest.

4

Aby wyjaśnić - musiałem przez chwilę zastanowić się nad tym, co to pytanie i odpowiedź oznaczają --- dokumentacja Python.org na temat os.environ nie wspomina o wszystkich wbudowanych metodach dla typów odwzorowania (takich jak os.environ, który jest w zasadzie słownikiem, dla którego podano dodatkowe metody).

Zamiast tego wspominają one głównie o dodatkowych metodach, które dali obiektowi w os, nazwanym environ i pochodzą od typu dict, poza tymi, które dyktował już wbudował. Z książki, którą mam na temat Pythona, streszczenie dla każdego rodzaju słownika jest dict.setdefault (key, default = None), a wyjaśnienie jest takie, że jest podobne do get(), ale ustawia dict [key] = default, jeśli klucz nie jest jeszcze w dyktafonie.

domyślnie nie jest dobrze wybierany jako nazwa tutaj, ponieważ łatwo go pomylić z somevariablename = defaultvalue, normalnym sposobem deklarowania wartości domyślnych w deklaracji funkcji. Oznacza to, że podczas gdy default = None z pewnością ustawia wartość domyślną, nie jest jasne, w jaki sposób setdefault w jakimkolwiek sensie zasadniczo ustawia wartość domyślną, ponieważ wartość domyślna może mieć dowolną wartość.

Powiązane problemy